2009-09-15 3 views
5

यहाँ के रूप में एक Enum का उपयोग कोड मैं का उपयोग करना चाहते है Enum नाम इस बिंदु पर मान्य नहीं है "। क्या मैं कुछ गलत कर रहा हूं, या यह नहीं किया जा सकता है?एक गुण तर्क

अधिक जानकारी

मैं Enum (दिन) पारित करने के लिए, और बेतरतीब ढंग से मूल्यों के पीछे एक मिल कोशिश कर रहा हूँ।

नेवरमिन्ड: मैं इस भाग को अधिक जटिल बना रहा था।

उत्तर

8

गुण में पैरामीटर केवल स्थिरांक हो सकता है। आप enum प्रकार आप ही प्रकार से गुजरना होगा पारित करना चाहते हैं:

[EnumHelper(typeof(Days))] 
public Days DayOfWeek { get; set; } 


[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)] 
public class EnumHelper : Attribute 
{ 
    public Type MyEnum; 
    public EnumHelper(Type enum) 
    { 
     MyEnum = enum; 
    } 
} 
0

पैरामीटर, एक enum मूल्य, नहीं एक enum प्रकार होना चाहिए:

[EnumHelper(Days.Sat)] 
+2

यह 'Days.Sat' से' Enum' तक मुक्केबाजी रूपांतरण की वजह से काम नहीं करेगा। –

+1

यह नहीं होगा? मैंने हमेशा स्थिर मानों को पारित करने के विचारों के साथ काम किया है। –

15

आप एक प्रकार का नाम पारित करने के लिए के रूप में अगर यह एक तर्क मूल्य थे कोशिश कर रहे हैं। आप ऐसा नहीं कर सकते हालांकि, अगर आप कर सकते हैं:

[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)] 
public class EnumHelper : Attribute 
{ 
    public Type EnumType; 
    public EnumHelper(Type enumType) 
    { 
     EnumType = enumType; 
    } 
} 

... 

[EnumHelper(typeof(Days))] 
public Days DayOfWeek { get; set; } 

हालांकि:

  • मैं व्यक्तिगत रूप से EnumType एक सार्वजनिक क्षेत्र नहीं होगा; इसे एक संपत्ति बनाओ।
  • वर्तमान में कोई सत्यापन नहीं है कि EnumTypeवास्तव में एक enum है। आप संकलन समय पर ऐसा नहीं कर सकते हैं, लेकिन आप निष्पादन समय पर कर सकते हैं।
  • सम्मेलन के लिए, यह EnumHelperAttribute (या कुछ अधिक वर्णनात्मक, वास्तव में) कहा जाता है किया जाना चाहिए - इस त्रुटि के कारण नहीं है, लेकिन इसे और अधिक मुहावरेदार
  • मैं सच में यकीन है कि मैं लाभ दिखाई नहीं दे रहा हूँ .. आप पहले से ही मेटाडेटा से संपत्ति का प्रकार पा सकते हैं; आपको क्या लगता है कि वास्तव में विशेषता आपको खरीद रही है?

यदि आप हमें बता सकते हैं कि आप क्या हासिल करने की कोशिश कर रहे हैं, तो हम आपके लिए अधिक उपयोगी हो सकते हैं।

0

बस यह जोड़ना चाहता था कि मैं इसमें कैसे भाग गया और इसे ठीक कर दिया। मैंने अपनी संपत्ति को मेरे गणित के समान नाम दिया था। कोड संकलित और चलाएगा, लेकिन मुझे आईडीई में लाल रेखा त्रुटि संदेश मिल रहा था। संपत्ति के नाम को कुछ अद्वितीय रूप से बदलकर संदेश को साफ़ कर दिया गया।