Tôi đang cố gắng thực hiện một số chuyển đổi dữ liệu. Thật không may, phần lớn dữ liệu nằm trong chuỗi, trong đó dữ liệu nên là int hoặc double, v.v ...
Vì vậy, những gì tôi đã nhận được là một cái gì đó như:
double? amount = Convert.ToDouble(strAmount);
Vấn đề với cách tiếp cận này là nếu strAmount trống, nếu nó trống tôi muốn nó là null, vì vậy khi tôi thêm nó vào cơ sở dữ liệu, cột sẽ là null. Vì vậy, tôi đã kết thúc việc viết này:
double? amount = null;
if(strAmount.Trim().Length>0)
{
amount = Convert.ToDouble(strAmount);
}
Bây giờ điều này hoạt động tốt, nhưng bây giờ tôi có năm dòng mã thay vì một dòng. Điều này làm cho mọi thứ khó đọc hơn một chút, đặc biệt là khi tôi có một số lượng lớn các cột để chuyển đổi.
Tôi nghĩ rằng tôi sử dụng một phần mở rộng cho lớp chuỗi và chung chung để chuyển qua loại, điều này là bởi vì nó có thể là một đôi, hoặc một int hoặc dài. Vì vậy, tôi đã thử điều này:
public static class GenericExtension
{
public static Nullable<T> ConvertToNullable<T>(this string s, T type) where T: struct
{
if (s.Trim().Length > 0)
{
return (Nullable<T>)s;
}
return null;
}
}
Nhưng tôi gặp lỗi: Không thể chuyển đổi loại 'chuỗi' thành 'T?'
Có cách nào để giái quyết vấn đề này không? Tôi không quen thuộc lắm với việc tạo ra các phương thức sử dụng thuốc generic.