2013-05-01 6 views
5

पर एक संपत्ति को कैसे असाइन कर सकता हूं, मैं नीचे विशेषता के लिए एक संपत्ति स्ट्रिंग असाइन करना चाहता हूं।मैं एक गुण

[ExtractKeyAttribute(**"Extraction"**)] 

public class Extract 
{ 
    .... 
} 

तो निष्कर्षण मेरी स्ट्रिंग है, लेकिन मैं वहाँ में मुश्किल कोड नहीं करना चाहता।

+0

क्या आप संपत्ति पर विशेषता डाल सकते हैं? –

+0

क्या कॉल करें? ऐसा लगता है कि आपके पास ऐसी संपत्ति है जो परिभाषित करती है कि कुंजी के रूप में निकाला जाना चाहिए, है ना? तो हो सकता है कि यदि आपके पास 'KeyName' विशेषता है और इसे संपत्ति पर रखा गया है, तो जो कुछ भी निष्कर्षण कर रहा है वह कक्षा के गुणों पर आपकी' KeyName' विशेषता को देख सकता है, फिर उस संपत्ति से जो भी संपत्ति हो, उसमें से कुंजी का नाम प्राप्त करें। क्या इसका कोई मतलब है? –

+0

@ChrisNielsen हां जो समझदार दोस्त बनाते हैं ... मैंने कॉन्स स्ट्रिंग में दिया है और विशेषता को असाइन किया है। – user1990395

उत्तर

13

असाइन करने के बेहतर तरीके पर कोई सुझाव आप यह नहीं कर सकते हैं।

विशेषता मान निरंतर भाव होना चाहिए। मान संकलित कोड में बेक्ड हैं। यदि आप निरंतर अभिव्यक्ति का उपयोग नहीं करना चाहते हैं, तो आप एक विशेषता का उपयोग नहीं कर सकते ... और आपको संभवतः नहीं करना चाहिए। इसका मतलब यह हो सकता है कि आप विशेषताओं का उपयोग कर रहे हैं जब आपको एक अलग दृष्टिकोण का उपयोग करना चाहिए।

आप properties vs attributes पर एरिक Lippert के ब्लॉग पोस्ट को पढ़ने के लिए चाहते हो सकता है।

बेशक, आपको वहां एक स्ट्रिंग अक्षर का उपयोग करने की आवश्यकता नहीं है। आप हो सकते हैं:

[ExtractKey(ExtractionKeys.Extraction)] 
... 


public static class ExtractionKeys 
{ 
    public const string Extraction = "Extraction"; 
} 

... लेकिन यह अभी भी एक संकलित समय स्थिर है।

+0

आपके त्वरित उत्तर के लिए धन्यवाद और मुझे लिंक – user1990395

+0

@ user1990395 के माध्यम से जांचने दें: मुझे डर है कि मुझे नहीं पता कि आपका क्या मतलब है। कृपया अपनी टिप्पणी स्पष्ट करें, और मैं जवाब देने में सक्षम हो सकता हूं। –

+0

बस पूर्णता के लिए, कठिन अक्षर से बचने के लिए एक और आम (-श) विकल्प विशेषता को उपclass करना है जैसे कि उपclass नियमित कोड में रनटाइम पर वास्तविक मान को हल कर सकता है। बहुत ही रोचक लिंक के लिए –

0

आपकी टिप्पणियों में आप कहते हैं कि आपके पास स्थिर वर्ग में सभी (स्ट्रिंग) मान हैं। क्या आपकी स्थैतिक कक्षा एक वर्ग है जो रीडोनली गुणों के साथ है? मेरा मतलब है, क्या मूल्य बदलते हैं? यदि नहीं, तो अपने स्थिर वर्ग में उन गुणों में से कुछ को स्ट्रिंग मानों के साथ बदलें। यू आपकी विशेषता को सेट करने के लिए इन मानों का उपयोग कर सकता है।

तो ...

static class MyClass 
{ 
    public string MyValue {get;} 
} 

बन जाएगा:

static class MyClass 
{ 
    public const string MyValue= "MyValue"; 
} 

अब अपनी विशेषता सेट किया जा सकता इस प्रकार है:

[ExtractKey(MyClass.MyValue)] 
0

आप की संपत्ति को संशोधित करना चाहते हैं अपने रनटाइम के दौरान विशेषता, तो आप इसे इस कोड के साथ कर सकते हैं:

ExtractKeyAttribute myAttribute = typeof(Extract).GetCustomAttributes(typeof(ExtractKeyAttribute), false)[0] as ExtractKeyAttribute; 
myAttribute.MyValue = "MyRunTimeValue"; 
संबंधित मुद्दे