是否可以从变量中获取默认值?
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());
答案 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