SORU
9 ŞUBAT 2010, Salı


C# ile jenerik hata " yardım;türü 'T' null olmayan bir değer olmalıdır türü"

C yeniyim# ve aşağıdaki kodu çalışmıyor anlamıyorum.

public static Nullable<T> CoalesceMax<T>(Nullable<T> a, Nullable<T> b) where T : IComparable
{
    if (a.HasValue && b.HasValue)
        return a.Value.CompareTo(b.Value) < 0 ? b : a;
    else if (a.HasValue)
        return a;
    else
        return b;
}

// Sample usage:
public DateTime? CalculateDate(DataRow row)
{
    DateTime? result = null;
    if (!(row["EXPIRATION_DATE"] is DBNull))
        result = DateTime.Parse((string)row["EXPIRATION_DATE"]);
    if (!(row["SHIPPING_DATE"] is DBNull))
        result = CoalesceMax(
            result
            DateTime.Parse((string)row["SHIPPING_DATE"]).AddYears(1));
    // etc.
    return result;
}

Derleme sırasında aşağıdaki hata verir:

Yazın bunu kullanmak için null olmayan bir değer türü olmalıdır parametre 'T' genel tür ya da yöntem 'Sistemi gibi.T Null<T>'

CEVAP
9 ŞUBAT 2010, Salı


Bir T eklemek gerekir : yapı görünümünde

public static Nullable<T> CoalesceMax<T>
    (Nullable<T> a, Nullable<T> b) where T : struct, IComparable

Nullable<T> ne demek, şimdiden kısıtlama Nullable<T> tarafından gerekli olmadığını fark etmeye çalış kendini. yoksa C# Diğer bir deyişle, aramayı deneyebilirsiniz:

CoalesceMax<string>(...)

Nullable<string> geçerli değil gibi mantıklı olmaz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elly

    Elly

    3 EKİM 2005
  • Joshua Bane

    Joshua Bane

    24 Temmuz 2007
  • VOICE TV

    VOICE TV

    2 Aralık 2010