SORU
21 NİSAN 2009, Salı


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
21 NİSAN 2009, Salı


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;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • chickenby

    chickenby

    2 HAZİRAN 2008
  • ehowhome

    ehowhome

    22 NİSAN 2009