Nếu bạn đang sử dụng .NET 4.0 trở lên và bạn muốn có một phiên bản lập trình không phải là mã hóa các quy tắc được xác định bên ngoài mã , bạn có thể tạo Expression
, biên dịch và chạy nó một cách nhanh chóng.
Phương thức mở rộng sau đây sẽ lấy a Type
và nhận giá trị được trả về default(T)
thông qua Default
phương thức trên Expression
lớp:
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()();
}
Bạn cũng nên lưu trữ giá trị trên dựa trên Type
, nhưng lưu ý nếu bạn gọi số này cho một số lượng lớn các Type
trường hợp và không sử dụng nó liên tục, bộ nhớ được sử dụng bởi bộ đệm có thể vượt quá lợi ích.