Tôi có một lớp chung sẽ cho phép bất kỳ kiểu nào, nguyên thủy hoặc cách khác. Vấn đề duy nhất với điều này là sử dụng default(T)
. Khi bạn gọi mặc định trên một kiểu giá trị hoặc một chuỗi, nó sẽ khởi tạo nó thành một giá trị hợp lý (chẳng hạn như chuỗi trống). Khi bạn gọi default(T)
một đối tượng, nó sẽ trả về null. Vì nhiều lý do khác nhau, chúng ta cần đảm bảo rằng nếu nó không phải là một kiểu nguyên thủy, thì chúng ta sẽ có một thể hiện mặc định của kiểu, không phải null. Đây là nỗ lực 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Vấn đề - chuỗi không phải là một kiểu giá trị, nhưng nó không có hàm tạo không tham số. Vì vậy, giải pháp hiện tại là:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Nhưng điều này cảm thấy giống như một bùn. Có cách nào tốt hơn để xử lý trường hợp chuỗi không?