类型为"<null>"的值不能用作默认参数,因为没有标准转换来键入"T"

Moh*_*ava 10 c# generics nullable type-conversion

我收到错误:

类型''的值不能用作默认参数,因为没有标准转换来键入'T'

在尝试编写这段代码时

protected T GetValue<T>(Expression<Func<T>> property, T defaultValueIfNull = null);
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何制作空值类型.反正有没有这样做?

Mik*_*aev 16

类型没有约束T,因此它可以是值类型.
您可以将方法定义重写为

protected T GetValue<T>(Expression<Func<T>> property, T defaultValueIfNull = default(T));
Run Code Online (Sandbox Code Playgroud)


null对于值类型的引用类型和默认值意味着什么.


C.E*_*uis 8

T在这种情况下,也可能是值类型,例如int,不可以null.您应该指定一个类型约束,限制T为类:

...T defaultValueIfNull = null) where T : class
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用...T defaultValueIfNull = default(T))- 您不需要约束,但0默认情况下值类型将变为,而不是null.