यदि आपके पास सामान्य प्रकार पैरामीटर है, तो जेफ ब्रिजमैन का जवाब सबसे अच्छा है। यदि आपके पास केवल उस प्रकार का ऑब्जेक्ट है जिसका आप निर्माण करना चाहते हैं, तो आप Activator.CreateInstance(Type)
का उपयोग कर सकते हैं जैसे कि एलेक्स लाइमैन ने सुझाव दिया था, लेकिन मुझे बताया गया है कि यह धीमा है (मैंने इसे व्यक्तिगत रूप से प्रोफाइल नहीं किया है)।
using System;
using System.Linq.Expressions;
public static class TypeHelper
{
public static Func<object> CreateDefaultConstructor(Type type)
{
NewExpression newExp = Expression.New(type);
// Create a new lambda expression with the NewExpression as the body.
var lambda = Expression.Lambda<Func<object>>(newExp);
// Compile our new lambda expression.
return lambda.Compile();
}
}
बस फोन प्रतिनिधि आपको लौटा:
हालांकि, अगर आप अपने आप को लगता है इन वस्तुओं बहुत बार निर्माण, वहाँ एक और अधिक सुवक्ता दृष्टिकोण गतिशील संकलित Linq भाव का उपयोग कर रहा है। आपको इस प्रतिनिधि को कैश करना चाहिए, क्योंकि लिंक अभिव्यक्तियों को लगातार पुन: सम्मिलित करना महंगा हो सकता है, लेकिन यदि आप प्रतिनिधि को कैश करते हैं और इसे हर बार पुन: उपयोग करते हैं, तो यह बहुत तेज़ हो सकता है! मैं व्यक्तिगत रूप से टाइप करके अनुक्रमित एक स्थिर लुकअप शब्दकोश का उपयोग करता हूं। यह फ़ंक्शन काम में आता है जब आप धारावाहिक वस्तुओं से निपट रहे हैं जहां आप केवल प्रकार की जानकारी जान सकते हैं।
नोट: यदि यह प्रकार रचनात्मक नहीं है या डिफ़ॉल्ट डिज़ाइनर नहीं है तो यह असफल हो सकता है!
स्थिर सदस्य जिन्हें आप कभी नहीं देखते ... यह शानदार है। –
निजी सदस्यों को भी देखा नहीं जाता है।मान लीजिए कि आपको केवल सार्वजनिक की जरूरत है तो यह सबसे सरल प्रतीत होता है। हालांकि यह सबसे तेज़ है? मैं अभी पता लगाने के लिए एक परीक्षण पर काम कर रहा हूं। –
कुछ उपाय इस उपाय को मापने के बाद MeasureIt (http://msdn.microsoft.com/en-us/magazine/cc500596.aspx) का उपयोग करके मेरे दृष्टिकोण बनाते हैं। यह दृष्टिकोण सभी सरल मामलों में तेज़ है और फिर भी यह मुश्किल से धीमा है। तो यह दोनों सबसे सरल और सबसे तेज़ है। धन्यवाद! –