默认(Surce)是一个真正的方法
本文关键字:一个 方法 Surce 默认 | 更新日期: 2023-09-27 18:34:31
在 Enumerable.FirstOrDefault 方法的 MSDN 帮助页面中,有一个方法结果解释为:
default(TSource( 如果 source 为空;否则,第一个元素 源。
备注部分包含注释:
引用类型和可为 null 的默认值为 null。
我一直在检查null
(VB.NET:Nothing
(值,但是是否有一些可以使用default(TSource)
而不是文字null/Nothing
?(例如default(int)
.(
我找不到default(TSource)
方法,但帮助页面上提到了它。或者这不是一种方法?
编辑:default(TSource)
在 C# 和 VB 的 MSDN 页面上都可见,我对涵盖两种语言的答案感兴趣。
此处记录的 default
运算符。它为引用类型返回null
,为值类型返回与类型相关的默认值。
默认值是用于获取默认值 Type
的关键字。 TSource
是泛型类型参数。它只是类型令牌的占位符。
当使用IEnumerable<int>
调用该方法时,TSource
将被int
,TSource
当使用IEnumerable<String>
调用时将被String
,依此类推。鉴于在这种情况下default(TSource)
变得default(int)
(用 int
调用(。
除非存在名称为 TSource
的类型或存在名称为 TSource
的泛型参数,否则没有什么比default(TSource)
更好的了。
我一直在检查空(VB.NET:什么都没有(
这不太正确。 Nothing
与null
不同; Nothing
表示null
当分配或比较具有 =
的可为空类型(引用类型或Nullable<T>
(时,或使用Is Nothing
进行比较时,表示将其分配给或与=
进行比较的不可为空值类型的默认值。
因此,VB:
Dim b as Boolean = 0 = Nothing ' b is True
与 C# 不同:
bool b = 0 == null; // b is false
而是:
bool b = 0 == default(int); // b is true
因此,如果不使用 Is
进行比较,default(T)
的 VB.NET 等价物确实Nothing
。
VB.NET 不允许你做val Is Nothing
val
不可空,而在 C# 中你可以做val == null
但它会导致警告(并且总是导致false
(。
VB.NET 允许您使用可为空的泛型类型执行val Is Nothing
,同样可以使用 C# 和 val == null
,在这种情况下,检查是val
是可为空的类型并且它设置为 null(并且是无浪费的类型,通常在不可空类型的情况下,抖动会优化val == null
/val Is Nothing
时可能发生的任何事情,因为它知道永远不会发生(。
以下 VB.NET 和 C# 方法是等效的:
public static bool Demonstrate<T>(T x)
{
T y = default(T);
bool isNull = x == null;
bool isDefault = x.Equals(default(T));
int zero = default(int)
return zero == default(int);
}
Public Shared Function Demonstrate(Of T)(x As T) As Boolean
Dim y As T = Nothing
Dim isNull As Boolean = x Is Nothing
Dim isDefault As Boolean = x.Equals(Nothing)
Dim zero As Integer = Nothing
Return zero = Nothing
End Function