Dize türü (int, double, vb...)null dönüştürmek
Bazı veri dönüşüm yapmaya çalışıyorum. Ne yazık ki, bir çok veriyi int ya, vb çift olması gerektiği gibi dizeler...
Yani benim sahip olduğum gibi bir şey
double? amount = Convert.ToDouble(strAmount);
Bu yaklaşımla sorun olursa strAmount eğer bu miktar için istiyorum boş, boş, boş olmak, bunu eklediğimde veritabanına sütun null olur. Bu yazı buldum kendimi:
double? amount = null;
if(strAmount.Trim().Length>0)
{
amount = Convert.ToDouble(strAmount);
}
Şimdi bu gayet iyi çalışıyor, ama ben artık bir yerine beş satır kod var. Bu özellikle dönüştürmek için sütun büyük miktarda olduğunda işler biraz daha zor bir okuma olanağı sağlıyor.
String sınıfı ve genel ... ... bir uzantısı yazın geçirmek için, bu bir çift, ya da bir int olabilir, ya da uzun süre kullanabilirim diye düşündüm. Yani bu çalıştı:
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;
}
}
Ama hatayı alıyorum: Cannot türü 'string', 'T?' dönüştürmek
Bu etrafında bir yolu var mı? Jenerik yöntemleri kullanarak oluşturma ile çok aşina değilim.
CEVAP
Akılda tutulması gereken bir diğer şey, dize null kendisi olabilir.
public static Nullable<T> ToNullable<T>(this string s) where T: struct
{
Nullable<T> result = new Nullable<T>();
try
{
if (!string.IsNullOrEmpty(s) && s.Trim().Length > 0)
{
TypeConverter conv = TypeDescriptor.GetConverter(typeof(T));
result = (T)conv.ConvertFrom(s);
}
}
catch { }
return result;
}
Dönüştürmek.() ChangeType türü Null ba...
Dize türü tamsayı dönüştürmek?...
Varlık Çerçevesi - türü Olamaz 'd...
Veri ({} yazın arayüzü) dönüştürmek iç...
Okuma/bir Dize için bir İnputStream dö...