这就是问题:
typeof(x)
您正在使用typeof
运算符,就好像它是一个方法调用一样,获取一个值。它不是。它需要一个编译时类型名称或类型参数(或未绑定类型,例如Dictionary<,>
, 或void
)。
与default
操作员一起尝试也是如此。
所以这就是问题所在- 但在不知道您要达到的目标的情况下,我们实际上无法就如何修复它提供建议。你可能只想要这样的东西:
public static IEnumerable<T> SelectDefault<T>(this IEnumerable<T> source)
{
return source.Select(x => default(T));
}
然后这个:
var abc = new[]{1,2,3,4}.SelectDefault().ToArray();
...会给你一个int[]
所有值为零的。
编辑:现在我们有了更多信息,更容易提供你想要的东西,这基本上是一种从 a 获取默认值的方法Type
,适当的装箱:
public static object GetDefaultValue(Type type)
{
// Non-nullable value types should be boxed, basically
if (type.IsValueType && Nullable.GetUnderlyingType(type) == null)
{
// Not the swiftest approach in the world, but it works...
return Activator.CreateInstance(type);
}
// Everything else defaults to null
return null;
}
所以你会有类似的东西:
var defaults = fields.Select(field => GetDefaultValue(field.type));
field
(根据问题, a在哪里FieldInfo
- 我故意不在这里打电话GetType()
。)