从变量中查找default()值

本文关键字:default 查找 变量 | 更新日期: 2023-09-27 17:57:41

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

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());

从变量中查找default()值

由于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