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

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • girleffect

    girleffect

    20 Mayıs 2008
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010