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

  • bunnyboxx

    bunnyboxx

    17 NİSAN 2008
  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • metagamers

    metagamers

    13 Mayıs 2006