从变量中查找default()值

时间:2016-07-20 05:12:57

标签: c# generics

是否可以从变量中获取默认值?

public static int CountNonDefault<T>(this T[] v)
{
    int count = 0;

    foreach (var item in v)
    {
        if (item.GetType != default(typeof(item)))
        {
            count++;
        }
    }

    return count;
}

我尝试过以下无效:

item.GetType != default(item.GetType().GetProperty("Value").PropertyType)
item.GetType != default(typeof(item));
item.GetType != default(item.GetType());

1 个答案:

答案 0 :(得分:3)

由于item变量属于通用类型T,那么default(T)如何:

T defaultValue = default(T);
foreach (T item in v)
{
    if (item != defaultValue)
    {

    }
}

要使用!=来比较T类型的两个对象,您必须更改以下方法:

 public static int CountNonDefault<T>(this T[] v) : where T : EqualityComparer<T>

如果这不适合您,那么您可以选择以下方法:

T defaultValue = default(T);
foreach (T item in v)
{
    if(item == null && defaultValue == null || (item.Equals(defaultValue)))
    {

    }
}

这是为了防止.Equals()抛出NullReferenceException