jjzjj

Nullable

全部标签

c# - .net 中的可空类型是如何实现的?

在我们自己的JonSkeet的C#indepth,他讨论了为值类型模拟“null”的3种方法:魔法值(例如,最早的DateTime被视为“空”)引用类型包装器bool标志提到可空类型使用第三种方法。可空类型到底是如何工作的? 最佳答案 最终,它们只是一个带有bool标志的通用结构-除了特殊的装箱规则。因为结构(默认情况下)初始化为零,所以bool默认为false(无值):publicstructNullablewhereT:struct{privatereadonlyTvalue;privatereadonlyboolhasValu

c# - .net 中的可空类型是如何实现的?

在我们自己的JonSkeet的C#indepth,他讨论了为值类型模拟“null”的3种方法:魔法值(例如,最早的DateTime被视为“空”)引用类型包装器bool标志提到可空类型使用第三种方法。可空类型到底是如何工作的? 最佳答案 最终,它们只是一个带有bool标志的通用结构-除了特殊的装箱规则。因为结构(默认情况下)初始化为零,所以bool默认为false(无值):publicstructNullablewhereT:struct{privatereadonlyTvalue;privatereadonlyboolhasValu

c# - 将泛型限制为可以为空的事物

我想将我正在编码的泛型限制为任何可以为null的东西。这基本上是任何类+System.Nullable(例如int?等)。对于类部分,这很容易:publicclassMyGenericwhereT:class{}但是,这不允许我这样做:varmyGeneric=newMyGeneric();或者这个:varmyGeneric=newMyGeneric>();编译器提示:错误CS0452:“int”类型?必须是引用类型才能将其用作泛型类型或方法“Test.MyGeneric”中的参数“T”所以我尝试添加System.Nullable作为T的可接受类型:publicclassMyGener

c# - 将泛型限制为可以为空的事物

我想将我正在编码的泛型限制为任何可以为null的东西。这基本上是任何类+System.Nullable(例如int?等)。对于类部分,这很容易:publicclassMyGenericwhereT:class{}但是,这不允许我这样做:varmyGeneric=newMyGeneric();或者这个:varmyGeneric=newMyGeneric>();编译器提示:错误CS0452:“int”类型?必须是引用类型才能将其用作泛型类型或方法“Test.MyGeneric”中的参数“T”所以我尝试添加System.Nullable作为T的可接受类型:publicclassMyGener

c# - 为什么不能在 Nullable<T> 简写上调用静态方法?

我以为T?只是Nullable的编译器简写.根据MSDN:ThesyntaxT?isshorthandforNullable,whereTisavaluetype.Thetwoformsareinterchangeable.但是,有一点(微不足道的)区别:VisualStudio不允许我调用简写的静态方法:boolb1=Nullable.Equals(1,2);//noerrorboolb2=int?.Equals(1,2);//syntaxerror"Invalidexpressionterm'int'"为什么?这种限制有什么原因吗? 最佳答案

c# - 为什么不能在 Nullable<T> 简写上调用静态方法?

我以为T?只是Nullable的编译器简写.根据MSDN:ThesyntaxT?isshorthandforNullable,whereTisavaluetype.Thetwoformsareinterchangeable.但是,有一点(微不足道的)区别:VisualStudio不允许我调用简写的静态方法:boolb1=Nullable.Equals(1,2);//noerrorboolb2=int?.Equals(1,2);//syntaxerror"Invalidexpressionterm'int'"为什么?这种限制有什么原因吗? 最佳答案

c# - 如果不为空则添加到集合

我有一个非常大的对象,其中包含许多可空类型的变量。我还有一本字典,我想用这个对象的非空变量来填充它。代码看起来像这样if(myObject.whatever!=null){myDictionary.Add("...",myObject.whatever);}if(myObject.somethingElse!=null){myDictionary.Add("...",myObject.somethingElse);...编辑(抱歉弄乱了代码)当我们重复无数次时,我们会得到一团很长的代码。有没有更短的方法可以写这个烂摊子?我知道条件运算符(又名?),但这仅适用于作业。是否有类似的东西可以

c# - 如果不为空则添加到集合

我有一个非常大的对象,其中包含许多可空类型的变量。我还有一本字典,我想用这个对象的非空变量来填充它。代码看起来像这样if(myObject.whatever!=null){myDictionary.Add("...",myObject.whatever);}if(myObject.somethingElse!=null){myDictionary.Add("...",myObject.somethingElse);...编辑(抱歉弄乱了代码)当我们重复无数次时,我们会得到一团很长的代码。有没有更短的方法可以写这个烂摊子?我知道条件运算符(又名?),但这仅适用于作业。是否有类似的东西可以

c# - 为什么 Nullable<T> 不是有效的自定义属性参数,而 T 是?

如果我有这样的枚举publicenumHungry{Somewhat,Very,CouldEatMySocks}和这样的自定义属性publicclassHungerAttribute:Attribute{publicHungryHungerLevel{get;set;}publicHungry?NullableHungerLevel{get;set;}}我能做到[Hunger(HungerLevel=Hungry.CouldEatMySocks)]publicclassThing1可是我做不到[Hunger(NullableHungerLevel=Hungry.CouldEatMySo

c# - 为什么 Nullable<T> 不是有效的自定义属性参数,而 T 是?

如果我有这样的枚举publicenumHungry{Somewhat,Very,CouldEatMySocks}和这样的自定义属性publicclassHungerAttribute:Attribute{publicHungryHungerLevel{get;set;}publicHungry?NullableHungerLevel{get;set;}}我能做到[Hunger(HungerLevel=Hungry.CouldEatMySocks)]publicclassThing1可是我做不到[Hunger(NullableHungerLevel=Hungry.CouldEatMySo