为什么在VB.NET中不能给整数赋值?为什么允许我在VB.NET中为Ntype赋值:DimxasInteger=Nothing但我不允许在C#中赋值null:intx=null;当您在VB.Net中将Nothing分配给值类型时,它会使用其默认值实例化该类型。所以在这种情况下,您不是在创建一个空整数,而是一个包含默认值0的整数。等效的C#代码如下所示:intx;x=默认值(整数);请注意,对于引用类型,同样适用:DimyAsObjecty=Nothing如果直接映射到C#,VB.Net代码将如下所示:objecty;y=默认值(对象);在.Net对象(或任何其他引用类型)中,默认值为null是一件好事。所以我们看到VB.Net的Nothing不是C#的null的直接模拟,至少在与值类型一起使用时是这样。语言规范中的一个有趣示例:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=01eee123-f68c-4227-9274-97a13d7cb433&displaylang=en7.1.1可空值类型对于值类型,a?可以将修饰符添加到类型名称以表示该类型的可空版本。可空值类型可以包含与该类型的不可空版本相同的值以及空值。因此,对于可为null的值类型,将Nothing分配给该类型的变量会将变量的值设置为null而不是值类型的零值。例如:DimxAsInteger=NothingDimyAsInteger?=Nothing'打印零Console.WriteLine(x)'什么都不打印(因为y的值为空值)Console.WriteLine(y)关于VB.NET规范(v.10中的任何内容):Nothing是一个特殊的文字;它没有类型,可以转换为类型系统中的所有类型,包括类型参数。当转换为特定类型时,它等同于该类型的默认值。从C#规范(v4)可以将null文字隐式转换为引用类型或可空类型。所以C#null不能隐式转换为值类型,但VB.NET没有任何可以的。但是设置x=Nothing令人困惑,因为在第一个视图中不清楚什么等于x=0。尤其是当Nothing不是无效值而是0(有效值)时,此赋值会导致误解,甚至会导致VB.NET代码中出现隐式错误。这是一篇关于VB.NET和Nothingvs.Null的有趣文章。一小段摘录:...无法与Nothing或Null进行比较的值类型。值类型是诸如整数和字节之类的类型。来自VisualBasicLanguageReference:值类型不能包含Nothing值,如果它被分配Nothing则恢复为默认值。如果Expression中提供了值类型,则IsNothing始终返回False。以上是C#学习教程:VB.NET中为什么不能给整数赋值?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
