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

  • FF Radio

    FF Radio

    16 Mayıs 2008
  • Doc Adams

    Doc Adams

    20 HAZİRAN 2007
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005