SORU
28 AĞUSTOS 2008, PERŞEMBE


Eğer genel bir türü bir dize ise test etmek için en iyi yol? (c#)

Herhangi bir tür ilkel veya başka bir şekilde izin gerektiğini genel bir Dersim var. Bu tek sorun default(T) kullanıyor. Bir değer türü, varsayılan ya da dize aradığınızda, makul bir değer (boş dize) başlatır. Bir nesne üzerinde default(T) çağırdığınızda, null döndürüyor. Çeşitli nedenlerle eğer ilkel bir tür değilse, o zaman bu tür bir varsayılan örnek olacaktır emin olmalıyızdeğilnull. Burada deneme 1:

T createDefault()
{
    if(typeof(T).IsValueType)
    {
        return default(T);
    }
    else
    {
        return Activator.CreateInstance<T>();
    }
}

Sorun - dize değeri türü değil, ama parametresiz bir kurucu yoktur. Yani, geçerli çözüm:

T createDefault()
{
    if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
    {
        return default(T);
    }
    else
    {
        return Activator.CreateInstance<T>();
    }
}

Ama bu çakma gibi geliyor. Daha güzel bir şekilde dizgi kolu var mı?

CEVAP
28 AĞUSTOS 2008, PERŞEMBE


Varsayılan(dizi) null dize değil, unutmayın.Boş. Kodunuzda özel bir durum isteyebilirsiniz:

if (typeof(T) == typeof(String)) return (T)(object)String.Empty;

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • grickle

    grickle

    22 AĞUSTOS 2006
  • ŠĩŗĜŕôŵåɭȍҭҭ

    ŠĩŗĜŕô

    29 Kasım 2009