泛型的默认值

如何为Wagon创建默认值 VB? 在 C# 我可以打电话:


T variable = default/T/;


我该怎么办 VB?

如果它只是返回 null /C#/ 或者什么都没有 /vb/, 值的类型会发生什么?

有没有办法指定用户型默认值? 例如,如果我希望默认值等同于在我的类中没有参数的构造函数调用,该怎么办。
已邀请:

八刀丁二

赞同来自:

问题 1:


Dim variable As T
' or '
Dim variable As T = Nothing
' or '
Dim variable As New T//


请注意,当您设置限制时,后者才有效
Structure

对于通用类型 /供参考类型
New T//

在 VB 做了什么比
default/T/

在 C#/.

问题 2:

对于值的类型,结构的所有成员都很重要 “nulled” out, 也就是说,引用类型的所有成员都很重要
null

/
Nothing

/, 又重置了所有类型的值。

没有,因为
string

是一个参考类型,它不是

导致
""

对于字符串,如在另一个答案中所建议的那样。

问题 3:

不,没有办法澄清它。 在 Stack Overflow 例如,它已经有一些关于它的主题,
https://coderoad.ru/333829/
. 约翰公布了
https://coderoad.ru/333829/
, 为什么它是如此。

裸奔

赞同来自:

事实上,人们,正确的方法来做这一领先类型
null

/
Nothing

/ 作为您的通用类型如下:


Dim tmpObj As T = CType/Nothing, T/


如果要返回默认值 generic, 你只是回来了
CType/Nothing, T/

小姐请别说爱

赞同来自:

实际上不是一个人 VB, 我在我的初步反应中犯了一些错误,Konrad让我直截了当地。 原始答案如下,但我想更新我的答案,以便在康拉德的输入的基础上进行正确的。

正如康莱德所说,
default/T/


Nothing

实际上相当于值和参考类型。 正确的代码 VB 必须如下所示,在这种情况下,您将获得与我的代码中完全相同的行为 C#:


Function ReturnSomething/Of T/// As T
Return Nothing
End Function

Function DoSomething/Of T///
Dim x as T = Nothing;
If x = Nothing Then
Console.WriteLine/"x is default."/
Else
Console.WriteLine/"x has a value."/
End If


原版的 /WRONG/ 回答

似乎没有等同的 VB
default/T/

. 但是,据
http://blog.somecreativity.com ... bnet/
, 不像 C#,, 如果一个
T

是价值的类型 VB 你仍然可以使用
Nothing

, 在大多数情况下,哪个语义相同。

一个伟大的地方,你有问题
Nothing

你经常使用的地方
default/T/

, - 如果您需要在代码中检查它。 考虑以下代码 C#:


T ReturnSomething<t>//
{
return default/T/;
}

void DoSomething<t>//
{
T x = default/T/;
if/x == default/T//
Console.WriteLine/"x is default."/;
else
Console.WriteLine/"x has a value."/;
}


翻译 VB 像那样:


Function ReturnSomething/Of T/// As T
Return Nothing
End Function

Function DoSomething/Of T///
Dim x as T = Nothing;
If x Is Nothing Then
Console.WriteLine/"x is default."/
Else
Console.WriteLine/"x has a value."/
End If
End Function


如果一个
T

是一个引用类型,两个版本都会与其完全相同
ReturnSomething

, 因此对于
DoSomething

. 但是,如果
T

那是价值的类型,然后
ReturnSomething

将以同样的方式行事,但是
DoSomething

将打印 "x is default." 在版本中 C#, 和 "x has a value." 在版本中 VB.
</t></t>

要回复问题请先登录注册