मैं वर्तमान में कुछ गतिशील तरीकों को बनाने के लिए जेनेरिक का उपयोग कर रहा हूं, जैसे वस्तु बनाना और मूल्यों के साथ गुण भरना।एक प्रकार से सामान्य चर बनाना - कैसे? या पैरामीटर() के बजाय गुण {} के साथ Activator.CreateInstance() का उपयोग करें?
क्या कोई तरीका जानने के बिना जेनेरिक "गतिशील रूप से" बनाने का कोई तरीका है? उदाहरण के लिए:
List<String> = new List<String>()
एक predefinied तरीका है, लेकिन
List<(object.GetType())> = new List<(object.GetType()>()
काम नहीं कर रहा ... लेकिन यह कर सकते हैं?
यह काम नहीं कर रहा (वहाँ एक समान दृष्टिकोण है कि काम करता है है?)
public T CreateObject<T>(Hashtable values)
{
// If it has parameterless constructor (I check this beforehand)
T obj = (T)Activator.CreateInstance(typeof(T));
foreach (System.Reflection.PropertyInfo p in typeof(T).GetProperties())
{
// Specifically this doesn't work
var propertyValue = (p.PropertyType)values[p.Name];
// Should work if T2 is generic
// var propertyValue = (T2)values[p.Name];
obj.GetType().GetProperty(p.Name).SetValue(obj, propertyValue, null);
}
}
तो, संक्षेप में: कैसे एक "प्रकार" लेने के लिए और जेनेरिक्स का उपयोग किए बिना कि से एक वस्तु बनाने के लिए? मैंने अभी तक जेनिक्स का उपयोग विधियों में किया है, लेकिन क्या चरों पर उसी तरह उपयोग करना संभव है? मुझे विधि से पहले जेनेरिक (टी) को परिभाषित करना है, तो क्या मैं उन्हें "बनाने" से पहले वैरिएबल पर भी कर सकता हूं?
... या पैरामीटर्स की बजाय गुणों के साथ ऑब्जेक्ट बनाने के लिए "एक्टिवेटर" का उपयोग कैसे करें। आप यहाँ कर की तरह:
// मानकों के साथ महत्व देता
Test t = new Test("Argument1", Argument2);
// गुण
Test t = new Test { Argument1 = "Hello", Argument2 = 123 };
मैं इस मामले में "सूची" का उपयोग नहीं करना चाहता, यह किसी भी वस्तु होना चाहिए। "ओपनलिस्ट टाइप टाइप करें (टाइपफॉफ़ (अज्ञात प्रकार);" – Deukalion
मुझे नहीं लगता कि यह उत्तर ओपी को हल करता है "पैरामीटर() के बजाय गुणों {} के साथ Activeator.CreateInstance() का उपयोग करें।" – Avishek