草庐IT

可空性

全部标签

c# - 表达式树和可空类型

我一直在研究表达式树。我有以下通过动态创建表达式树来执行查询的简单方法。ItemType在数据库中是一个可为null的int,在EF实体类中也是。出于某种原因,虽然查询抛出的错误UnhandledException:System.InvalidOperationException:ThebinaryoperatorEqualisnotdefinedforthetypes'System.Nullable`1[System.Int32]'and'System.Int32'.我不认为我要求EF转换任何东西。我已将我的参数定义为int?,我认为它应该是这样。注意,我看过这个Workingwit

c# - C# 编译器是否优化可空类型?

任何人都可以阐明此单元测试在VisualStudio2013中失败的原因吗?[TestMethod]publicvoidInconceivable(){int?x=0;Assert.AreEqual(typeof(int?),x.GetType());} 最佳答案 您的测试失败是因为:CallingGetTypeonaNullabletypecausesaboxingoperationtobeperformedwhenthetypeisimplicitlyconvertedtoObject.ThereforeGetTypealway

C# 可空类型和 Value 属性

我不太清楚在获取可空类型中包含的值时,何时/是否必须使用可空类型的Value属性。考虑以下示例:int?x=10;Console.WriteLine("Thevalueof'x'is"+x.Value);Console.WriteLine("Thevalueof'x'is"+x);这两个都返回相同的值(10)。但是,如果我最初将x设置为null,第一个Console.WriteLine会抛出异常,而第二个则不会。所以,我的问题是这样的。使用Value属性有什么意义?它似乎不需要获取实际值(即使它是null),如果该值确实是null,则会抛出异常。 最佳答案

c# - 使用 SQLDataReader 的可空 DateTime

这个问题在这里已经有了答案:SQLDataReaderNulltodatetime(2个答案)关闭2年前。我几乎不想问这个问题,好像它已经被问过一百万次了,但即使我研究了另一个问题,我似乎仍然无法在我的案例中解决这个问题。我读到DateTime是一个可以为null的类型,我尝试了一些示例,但我试图弄清楚它在数据库中是否为NULL我的SQLDATAREADER失败了。错误System.Data.SqlTypes.SqlNullValueException:DataisNull.Thismethodorpropertycannot'becalledonNullvalues.'细节类priv

c# - 可空 boolean 作为 C# 中的三态变量

使用可空boolean值存储三态值有什么好处吗?例如,null==1ststate,false==2ndstate,true==3rdstate?开销可能比使用字节枚举要高,但我很好奇。 最佳答案 您应该获得FrameworkDesignGuidelines的副本。第177页有一章在枚举和boolean参数之间进行选择。其中一个要点是:不要使用boolean值,除非您绝对确定永远不会需要两个以上的值。 关于c#-可空boolean作为C#中的三态变量,我们在StackOverflow上找

c# - C# 可空类型的编码实践

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion我从未在我的C#代码中使用可为null的类型。现在我决定通过在我的代码中引入可空类型来改变我的编码习惯。在应用程序编程的情况下,从普通数据类型过渡到可空数据类型时,编码实践应进行哪些主要更改?需要注意哪些方面?我应该时刻注意哪些要点?

c# - 引用类型与可空类型 ToString()

有人可以解释一下为什么在空引用类型上调用ToString()会导致异常(在我看来这是完全有道理的,你不能什么都不调用方法!)但是在空的Nullable(OfT)上调用ToString()返回String.Empty?这让我感到非常惊讶,因为我认为这种行为在不同类型之间是一致的。Nullablevalue=null;Stockstock=null;stringresult=value.ToString();//Returnsemptystringstringresult1=stock.ToString();//CausesaNullReferenceException

c# - 如何通过反射代码(c#)设置可空类型?

我需要使用反射设置类的属性。我有一个Dictionary带有属性名称和字符串值。在反射循环中,我需要在为每个属性设置值时将字符串值转换为适当的属性类型。其中一些属性类型是可为null的类型。我如何从PropertyInfo知道该属性是否为可空类型?如何使用反射设置可为null的类型?编辑:此博客评论中定义的第一种方法似乎也可以解决问题:http://weblogs.asp.net/pjohnson/archive/2006/02/07/437631.aspx 最佳答案 一种方法是:type.GetGenericTypeDefinit

c# - 使不可空值类型可空

我有一个用途有限的简单结构。该结构是在从数据库调用数据的方法中创建的。如果没有从数据库返回的数据,我希望能够返回null,但VisualStudio会提示,无法将null转换为PackageName.StructName,因为它是不可为null的值类型。如何让它可以为空? 最佳答案 您想查看Nullable值类型。 关于c#-使不可空值类型可空,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques

c# - 装箱/拆箱可空类型 - 为什么要执行此操作?

通过C#在装箱/拆箱值类型上从CLR中提取...关于装箱:如果可为空的实例不是null,CLR会从可为空的实例中取出值并将其装箱。换句话说,值为5的Nullable装箱到值为5的boxed-Int32中。关于拆箱:拆箱只是获取对已装箱对象的未装箱部分的引用的行为。问题在于装箱值类型不能简单地拆箱为该值类型的可为空版本,因为装箱值中没有booleanhasValue字段。因此,当将值类型拆箱为可空版本时,CLR必须分配一个Nullable对象,将hasValue字段初始化为true,并将value字段设置为盒装值类型中的相同值。这会影响您的应用程序性能(拆箱期间的内存分配)。为什么CLR