यदि आप .NET 4.0 या इसके बाद के संस्करण का उपयोग कर रहे हैं और आप एक प्रोग्रामेटिक संस्करण चाहते हैं जो कोड के बाहर परिभाषित नियमों का एक कोडीकरण नहीं है , तो आप इसे बना सकते हैंExpression
-संकलन और इसे ऑन-द-फ्लाई चला सकते हैं।
निम्नलिखित विस्तार विधि एक लेगी Type
और वर्ग पर विधि केdefault(T)
माध्यम से लौटाए गए मान प्राप्त करेगी :Default
Expression
public static T GetDefaultValue<T>()
{
// We want an Func<T> which returns the default.
// Create that expression here.
Expression<Func<T>> e = Expression.Lambda<Func<T>>(
// The default value, always get what the *code* tells us.
Expression.Default(typeof(T))
);
// Compile and return the value.
return e.Compile()();
}
public static object GetDefaultValue(this Type type)
{
// Validate parameters.
if (type == null) throw new ArgumentNullException("type");
// We want an Func<object> which returns the default.
// Create that expression here.
Expression<Func<object>> e = Expression.Lambda<Func<object>>(
// Have to convert to object.
Expression.Convert(
// The default value, always get what the *code* tells us.
Expression.Default(type), typeof(object)
)
);
// Compile and return the value.
return e.Compile()();
}
आपको इसके आधार पर उपरोक्त मूल्य को भी कैश करना चाहिए Type
, लेकिन जागरूक रहें यदि आप इसे बड़ी संख्या में Type
उदाहरणों के लिए कॉल कर रहे हैं , और इसका लगातार उपयोग न करें, तो कैश द्वारा खपत की गई मेमोरी लाभों से आगे निकल सकती है।