निम्नलिखित सरल कोड ले लो। DoMyCode
विधि में प्रविष्टियों के बीच एक स्थान के साथ दो विशेषताओं को लागू किया गया है।वीएस 2015 क्यों रिक्त स्थान से अलग गुणों को अनुमति देता है जबकि वीएस 2017 नहीं करता है?
using System;
namespace AttributeSpaceTesting
{
class Program
{
static void Main(string[] args) { }
[Horse Cow]
static void DoMyCode() { }
}
[AttributeUsage(AttributeTargets.Method)]
class HorseAttribute : Attribute { }
[AttributeUsage(AttributeTargets.Method)]
class CowAttribute : Attribute { }
}
यह वीएस 2015 लक्ष्यीकरण .NET 4.6 में बनाया गया था।
यदि आप विजुअल स्टूडियो 2015 (अपडेट 3) में यह कोड चलाते हैं तो यह संकलित और कोई त्रुटि या चेतावनी के साथ चलाएगा।
Syntax error, ',' expected
मैं क्यों इस त्रुटि होता है:
हालांकि, विजुअल स्टूडियो 2017 में ठीक उसी कोड चलाने निम्नलिखित अपवाद का उत्पादन करेगा। मुझे उम्मीद है कि आपको विशेषता वस्तुओं के बीच अल्पविराम की आवश्यकता होगी। सी # 5 विनिर्देशों की धारा 17.2 में:
एक विशेषता खंड में वर्ग ब्रैकेट की एक जोड़ी होती है, जो एक या अधिक विशेषताओं की अल्पविराम से अलग सूची को घेरती है।
तो वीएस 2015 में यह वाक्यविन्यास कानूनी क्यों है?
पूर्ण संदर्भ के लिए, मैं अपनी टीम की यूनिट परीक्षण परियोजनाओं पर वीएस 2017 का उपयोग करने के साथ प्रयोग कर रहा हूं। मैंने इस तरह की लाइनों को देखा है:
[Description(@"The Test Description")]
[TestCategory("Regression"), TestCategory("Module"), TestCategory("ModuleRegression") TestMethod]
public void TC_12345_VerifyTheThingWorks()
जो नए विजुअल स्टूडियो सिस्टम में संकलित होने पर वाक्यविन्यास त्रुटियों का कारण बनता है।
[यह एक बग था] (https://github.com/dotnet/roslyn/issues/14696), एक सुविधा नहीं, यह तय हो गया। –
क्योंकि वीएस 15 को इसकी अनुमति नहीं देनी चाहिए थी। – Andrew