草庐IT

可空性

全部标签

c# - 可空类型如何使用比较运算符处理空值?

有没有人知道C#如何处理与Nullable的比较的具体信息?当比较的一侧为空时类型?据我对编译器的实验了解,比较似乎总是返回false,但我找不到任何文档来支持这一点。这是该语言的一个真正特性(因此我可以指望它),还是一个可能在未来版本中改变的实现细节?换句话说,下面的方法返回true是否暗示y.HasValue,你能给我指出一些证明它确实如此的文档吗?publicboolfoo(intx,int?y){returnx 最佳答案 DoesanyonehaveconcreteinformationonhowC#handlescompa

c# - 通过反射检测可空类型

令人惊讶的是,以下代码未能通过断言:int?wtf=0;Assert.IsType>(wtf);出于好奇,您如何确定给定实例是否为Nullable对象? 最佳答案 首先,Nullable是一个结构,所以没有这样的对象。你不能调用GetType(),因为这会将值装箱(此时您要么得到null并因此出现异常,要么装箱的不可为null的值因此不是您想要的类型)。(拳击是什么搞砸了你的断言-我会假设IsType接受object。)虽然您可以使用类型推断来获取变量的类型作为类型参数:publicboolIsNullable(Tvalue){re

c# - 创建可空类

如何在C#中创建可为空的(?)类?喜欢:publicclassHello1{publicintProperty1{get;set;}}publicclassHello2{PublicHello1?Property2{get;set;}//Hello1shouldworkwhenithas"?"}如果需要,我想让Hello1类能够采用Hello1?的形式。 最佳答案 您不需要为引用类型创建可空类型。它们已经可以为空。您只需要为int、bool、decimal等值类型执行此操作... 关于c

c# - 强类型数据表/数据集中的可空类型 - 解决方法?

强类型数据表支持“可空”字段类型,但设计器不允许您将任何值类型字段的设置更改为“允许空值”。(即:字符串类型允许为空,但int类型不允许)。解决方法是在您想要获取Myfield时随时调用IsMyFieldNull()。如果您在MyField确实包含null时访问它,它会引发异常。这是一个非常令人头疼的问题,此外还会在出现null时导致应用程序崩溃时导致许多运行时错误。多年来我一直向微软提示这个问题,但visualstudio的每个新版本仍然不允许使用可为null的值类型。我的问题:有人知道可以用来解决这个主要缺点的奇特扩展方法吗? 最佳答案

c# - 通过编译器生成的局部变量 : why is this failing? 隐式转换为具有可空结构的 System.Double

鉴于以下情况,为什么会抛出InvalidCastException?我不明白为什么它应该在错误之外(这是在x86中;x64在clrjit.dll中崩溃并出现0xC0000005)。classProgram{staticvoidMain(string[]args){MyDouble?my=newMyDouble(1.0);Booleancompare=my==0.0;}structMyDouble{Double?_value;publicMyDouble(Doublevalue){_value=value;}publicstaticimplicitoperatorDouble(MyDou

C# 强制转换为可空类型?

超越Cast和As之间的常规无聊区别如果我知道苹果是一种水果,那么我就可以使用(Fruit)apple-而且它如果不是则抛出异常asvalue可以针对null检查是否成功[不会抛出异常...]但是我一直在阅读@EricLippertarticle关于这个,有一个关于NullableValueTypes的很​​好的示例:short?s=(short?)123;int?i=sasint?;这不会编译...无法转换类型“短”?到'int?通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换很好。为什么会这样:short?s=(short?)123;int?i=(int?)s;是否编译?(与

c# - 可空类型到底什么时候抛出异常?

考虑以下代码:int?x=null;Console.Write("Hashcode:");Console.WriteLine(x.GetHashCode());Console.Write("Type:");Console.WriteLine(x.GetType());执行时,它写入Hashcode为0,但在尝试确定x的类型时因NullReferenceException而失败。我知道在可空类型上调用的方法实际上是在基础值上调用的,所以我预计程序会在x.GetHashCode()期间失败。那么,这两种方法之间的根本区别是什么?为什么第一种方法不会失败? 最佳答

c# - 可空类型存储在内存中的什么位置?

这可能是关于nullabletypes的后续问题.可空值类型(int?...)究竟存储在内存中的什么位置?首先我认为它足够清楚,因为Nullable是结构,那些是值类型。然后我找到了JonSkeet的文章“Memoryin.NET”,其中说:Notethatavaluetypevariablecanneverhaveavalueofnull-itwouldn'tmakeanysense,asnullisareferencetypeconcept,meaning"thevalueofthisreferencetypevariableisn'tareferencetoanyobjectat

c# - 什么时候应该在 C# 中使用可空类型?

我在很多面试中都被反复问到以下问题....但还是无法用一个简单的例子来解释...C#中的可空类型是什么?什么时候应该在C#中使用可空类型?你能举个简单的例子吗?有什么建议吗? 最佳答案 来自UsingNullableTypes(C#ProgrammingGuide)(链接已更新circa2018)Foranexampleofwhenyoumightuseanullabletype,considerhowanordinaryBooleanvariablecanhavetwovalues:trueandfalse.Thereisnova

c# - 为什么我不应该总是在 C# 中使用可空类型

自从.net2.0中引入这个概念以来,我一直在寻找一些好的指导。为什么我要在C#中使用不可为null的数据类型?(一个更好的问题是为什么我不默认选择可空类型,而只在明确有意义时才使用不可空类型。)选择可空数据类型而不是非可空数据类型对性能有“重大”影响吗?我更喜欢根据null而不是Guid.empty、string.empty、DateTime.MinValue、有没有人总是(最总是)选择可空类型而不是不可空类型?谢谢你的时间, 最佳答案 您不应该总是使用可空类型的原因是,有时您可以保证一个值将被初始化。并且您应该尝试设计您的代码,