默认值表达式生成类型的默认值。 默认值表达式在泛型类和泛型方法中非常有用。 使用泛型类和泛型方法时出现的一个问题是,如何在无法提前知道以下内容的情况下将默认值赋值给参数化类型 T
:
T
是引用类型还是值类型。- 如果
T
是值类型,它是数值还是用户定义的结构。
已知参数化类型 T
的变量 t
,仅当 T
为引用类型时,语句 t = null
才有效。 赋值 t = 0
仅对数值类型有效,对结构无效。 解决方案是使用默认值表达式,该表达式对引用类型(类类型和接口类型)返回 null
,对数值类型返回零。 对于用户定义的结构,返回初始化为零位模式的结构,该结构根据成员是值还是引用类型,为每个成员生成 0 或 null
。 对于可为 NULL 的值类型,default
返回像任何结构一样初始化的System.Nullable<T>。
default(T)
表达式不限于泛型类和泛型方法。 默认值表达式可用于任何托管类型
以上内容来自MSDN。
示例代码:
int iValue = default(int);
float fValue = default(float);
decimal dValue = default(decimal);
Console.Write("值类型测试:");
Console.WriteLine("{0},{1},{2}", iValue, fValue, dValue);
string strValue = default(string);
DateTime? dt = default(DateTime?);
User user = default(User);
Console.Write("引用类型测试:");
Console.WriteLine("{0},{1},{2}", (null == strValue), (null == user), (null == dt));
Console.WriteLine();
float fValue = default(float);
decimal dValue = default(decimal);
Console.Write("值类型测试:");
Console.WriteLine("{0},{1},{2}", iValue, fValue, dValue);
string strValue = default(string);
DateTime? dt = default(DateTime?);
User user = default(User);
Console.Write("引用类型测试:");
Console.WriteLine("{0},{1},{2}", (null == strValue), (null == user), (null == dt));
Console.WriteLine();
运行结果:
![](https://app.yinxiang.com/shard/s61/res/eb5f0e72-e4f0-4788-9f92-d5f8c5b51570/1.jpg)
![](https://app.yinxiang.com/shard/s61/res/eb5f0e72-e4f0-4788-9f92-d5f8c5b51570/1.jpg)