2012-01-21 17 views
6

क्या स्ट्रिंग द्वारा सदस्य तक पहुंचने का कोई तरीका है (जो नाम है)?सी # में स्ट्रिंग द्वारा कक्षा सदस्य तक कैसे पहुंचे?

उदा। यदि स्थिर कोड है:

classA.x = someFunction(classB.y); 

लेकिन मैं केवल दो तार है:

string x = "x"; 
string y = "y"; 

जावास्क्रिप्ट में मैं जानता हूँ कि आप बस कर सकते हैं:

classA[x] = someFunction(classB[y]); 

लेकिन यह कैसे सी # में यह करने के लिए?

साथ ही, स्ट्रिंग द्वारा नाम को परिभाषित करना संभव है?

उदाहरण के लिए:

string x = "xxx"; 
class{ 
    bool x {get;set} => means bool xxx {get;set}, since x is a string 
} 

अद्यतन, tvanfosson करने के लिए, मैं यह काम नहीं कर प्राप्त कर सकते हैं, यह है:

public class classA 
{ 
    public string A { get; set; } 
} 
public class classB 
{ 
    public int B { get; set; } 
} 

var propertyB = classB.GetType().GetProperty("B"); 
var propertyA = classA.GetType().GetProperty("A"); 
propertyA.SetValue(classA, someFunction(propertyB.GetValue(classB, null) as string), null); 

उत्तर

10

आप reflection उपयोग करने के लिए की जरूरत है।

var propertyB = classB.GetType().GetProperty(y); 
var propertyA = classA.GetType().GetProperty(x); 

propertyA.SetValue(classA, someFunction(propertyB.GetValue(classB,null) as Foo), null); 

जहां Foo पैरामीटर कि someFunction की आवश्यकता के प्रकार है। ध्यान दें कि यदि someFunctionobject लेता है तो आपको कास्ट की आवश्यकता नहीं है। यदि प्रकार एक मान प्रकार है तो आपको इसके बजाय इसे कास्ट करने के लिए (Foo)propertyB.GetValue(classB,null) का उपयोग करना होगा।

मुझे लगता है कि हम गुणों के साथ काम कर रहे हैं, फ़ील्ड नहीं। यदि ऐसा नहीं है तो आप गुणों के बजाय फ़ील्ड के तरीकों का उपयोग करने के लिए बदल सकते हैं, लेकिन संभवतः आपको गुणों का उपयोग करने के लिए स्विच करना चाहिए क्योंकि फ़ील्ड आमतौर पर सार्वजनिक नहीं होना चाहिए।

प्रकार संगत नहीं हैं, जैसे कि, someFunctionA की संपत्ति के प्रकार वापस नहीं करता है या यह आबंटित नहीं है, तो आप उचित प्रकार से एक रूपांतरण करने की आवश्यकता होगी। इसी तरह यदि बी का प्रकार फ़ंक्शन के पैरामीटर के साथ संगत नहीं है, तो आपको वही काम करने की आवश्यकता होगी।

propetyA.SetValue(classA, someFunction(Convert.ToInt32(propertyB.GetValue(classB,null))).ToString()); 
+0

इसे काम नहीं मिल सकता है, कृपया मेरे अपडेट –

+1

@EricYin मुझे लगता है कि मैं यह भी मान रहा था कि प्रकार संगत थे। यदि प्रकार संगत नहीं हैं तो आपको उन्हें संगत प्रकारों में बदलने की आवश्यकता होगी। एक रूपांतरण मौजूद है मानते हुए, एक तरीका 'कनवर्ट' का उपयोग करेगा। – tvanfosson

+0

यह काम किया, धन्यवाद। क्या यह बहुत कम प्रदर्शन करेगा? या यह एकमात्र समाधान है और कोई विकल्प नहीं –

संबंधित मुद्दे