默认(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 页面上都可见,我对涵盖两种语言的答案感兴趣。

默认(Surce)是一个真正的方法

您可以使用

此处记录的 default 运算符。它为引用类型返回null,为值类型返回与类型相关的默认值。

默认值是用于获取默认值 Type 的关键字。 TSource 是泛型类型参数。它只是类型令牌的占位符。

当使用IEnumerable<int>调用该方法时,TSource将被intTSource当使用IEnumerable<String>调用时将被String,依此类推。鉴于在这种情况下default(TSource)变得default(int)(用 int 调用(。

除非存在名称为 TSource 的类型或存在名称为 TSource 的泛型参数,否则没有什么比default(TSource)更好的了。

我一直在检查空(VB.NET:什么都没有(

这不太正确。 Nothingnull不同; 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