सी # में 3.0 आप निम्न सिंटैक्सगतिशील नई बेनामी कक्षा कैसे करें?
var o1 = new { Id = 1, Name = "Foo" };
साथ गुमनाम वर्ग बना सकते हैं वहाँ एक रास्ता गतिशील एक चर करने के लिए इन गुमनाम वर्ग बनाने के लिए है?
उदाहरण:
var o1 = new { Id = 1, Name = "Foo" };
var o2 = new { SQ = 2, Birth = DateTime.Now };
गतिशील उदाहरण बनाने के लिए:
var o1 = DynamicNewAnonymous(new NameValuePair("Id", 1), new NameValuePair("Name", "Foo"));
var o2 = DynamicNewAnonymous(new NameValuePair("SQ", 2), new NameValuePair("Birth",
DateTime.Now));
क्योंकि मैं क्या करने की जरूरत:
dynamic o1 = new ExpandObject();
o1."ID" = 1; <--"ID" is dynamic name
o1."Name" = "Foo"; <--"Name" is dynamic name
और Scene1:
void ShowPropertiesValue(object o)
{
Type oType = o.GetType();
foreach(var pi in oType.GetProperties())
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
अगर मैं फोन:
dynamic o1 = new ExpandObject();
o1.Name = "123";
ShowPropertiesValue(o1);
यह परिणाम नहीं दिखा सकते हैं:
Name = 123
और यह भी मैं कैसे AnonymouseType को ExpandoObject कन्वर्ट करने के लिए?
Type type = o1.GetType();
type.GetProperties(); <--I hope it can get all property of o1
अंतिम, मैं ShowPropertiesValue() विधि) को संशोधित
void ShowPropertiesValue(object o)
{
if(o is static object) <--How to check it is dynamic or static object?
{
Type oType = o.GetType();
foreach(var pi in oType.GetProperties())
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
else if(o is dynamic object) <--How to check it is dynamic or static object?
{
foreach(var pi in ???) <--How to get common dynamic object's properties info ?
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
}
कैसे DynamicNewAnonymous विधि लागू करने के लिए या कैसे ShowPropertiesValue बदलना चाहते हैं (?
मेरे मंशा है:
dynamic o1 = new MyDynamic();
o1.Name = "abc";
Type o1Type = o1.GetType();
var props = o1Type.GetProperties(); <--I hope can get the Name Property
मैं dynamicObject के GetType विधि हुक कर सकते हैं और मजबूर दृढ़ता से टाइप करने के लिए प्रकार परिवर्तित करें। उपरोक्त सीमलेस कोड ठीक काम कर सकता है।
@Vlad: मैं मानता हूं कि मैं प्रेरणा के बारे में थोड़ा अस्पष्ट हूं। –
@VladLazarenko मुझे लगता है कि आप सही हैं :-) – oberfreak
कृपया हमें बताएं, आप क्या करना चाहते हैं और यह आपका चयनित समाधान क्यों है। – oberfreak