jjzjj

Nullable

全部标签

c# - 为什么 == 运算符在未定义 == 时对 Nullable<T> 起作用?

我只是在看thisanswer,其中包含Nullable的代码从.NETReflector,我注意到两件事:从Nullable开始时需要显式转换至T.==运算符未定义。鉴于这两个事实,编译结果令我感到惊讶:int?value=10;Assert.IsTrue(value==10);使用代码value==10,value正在神奇地转换为int(因此允许使用int的==运算符,或者==运算符被神奇地定义为Nullable。(或者,我认为不太可能,Reflector遗漏了一些代码。)我希望必须执行以下操作之一:Assert.IsTrue((value.Equals(10));//worksb

c# - 哪个是首选 : new Nullable<int> or (int? )null?

在这样的表达式中首选哪种方式:int?Id{get{inti;returnInt32.TryParse(Request["id"],outi)?i:(int?)null;}}在null上转换更好吗?或者创建一个newNullable? 最佳答案 最好的是default(int?),因为它总是按预期工作(引用类型、值类型,甚至在泛型中)。 关于c#-哪个是首选:newNullableor(int?)null?,我们在StackOverflow上找到一个类似的问题:

c# - 比较可为 null 的日期时间对象

我有两个可为null的日期时间对象,我想比较两者。最好的方法是什么?我已经试过了:DateTime.Compare(birthDate,hireDate);这给出了一个错误,也许它期望类型为System.DateTime的日期并且我有Nullabledatetimes。我也试过:birthDate>hiredate...但结果并不如预期...有什么建议吗? 最佳答案 比较两个Nullable对象使用Nullable.Compare喜欢:boolresult=Nullable.Compare(birthDate,hireDate)>0

c# - WCF 服务协定是否可以具有可为 null 的输入参数?

我有一个这样定义的契约(Contract):[OperationContract][WebGet(UriTemplate="/GetX?myStr={myStr}&myX={myX}",BodyStyle=WebMessageBodyStyle.Wrapped)]stringGetX(stringmyStr,int?myX);我得到一个异常(exception):[InvalidOperationException:契约(Contract)“IMyGet”中的操作“GetX”有一个名为“myX”的查询变量,类型为“System.Nullable1[System.Int32]”,但类型为

c# - C# 中的可空方法参数

这个问题在这里已经有了答案:关闭13年前。重复问题PassingnullargumentstoC#methods我可以在.Net2.0的c#中执行此操作吗?publicvoidmyMethod(stringastring,int?anint){//somecodeinwhichImayhaveaninttoworkwith//orImaynot...}如果没有,我可以做类似的事情吗?

c# - Nullable<bool> 类型有什么用?

bool变量可以是true或false,而bool?也可以是null。为什么我们需要bool的第三个值?如果它不是true,无论它是什么,它都是==false你能建议一个我喜欢bool?的场景吗?谢谢 最佳答案 出于多种原因,某些内容可能为真、假或未定义。如何回答“你的第三个child是女孩?”如果一个人只有两个child呢?true和false都不正确。Null表示比较不适用。 关于c#-Nullable类型有什么用?,我们在StackOverflow上找到一个类似的问题:

c# - 默认模型绑定(bind)器不绑定(bind) IEnumerable 中的 Nullable 类型

我有一个Controller操作,其定义如下所示-publicActionResultChangeModel(IEnumerableinfo,long?destinationId)和模型:publicclassMyModel{publicstringName;//Getspopulatedbydefaultbinderpubliclong?SourceId;//remainsnullthoughthevalueissetwheninvoked}'Name'属性在Controller操作中被填充,但是SourceId属性保持为空。destinationId是一个long?参数也会被填充。

c# - 为什么有些方法对可空结构的空值起作用而有些方法不起作用?

开门见山:int?i=null;i.ToString();//happyi.GetType();//nothappy我得到一个veryrelatedquestion这实际上是关于为什么i.ToString()工作正常。编辑:刚发现这个极端情况是themostvotedoneinthisSOthread! 最佳答案 是因为ToString是虚拟的,而GetType不是。Nullable在CLR中具有特殊的装箱行为。当您调用GetType在可为空的情况下,它被装箱(请参阅MSDN,实际上任何struct都会发生这种情况)。但是,对于可空

c# - 为什么不能使用 is 运算符来区分 bool 和 Nullable<bool>?

我遇到了这个,很好奇为什么不能使用is运算符区分bool和Nullable?示例;voidMain(){booltheBool=false;NullabletheNullableBoolThatsFalse=false;NullabletheNullableBoolThatsNull=null;voidWhatIsIt(objectvalue){if(valueisbool)Console.WriteLine("It'sabool!");if(valueisNullable)Console.WriteLine("It'saNullable!");if(valueisnull)Conso

c# - 为什么可空的模式匹配会导致语法错误?

我喜欢在nullableint上使用模式匹配,即int?:intt=42;objecttobj=t;if(tobjisint?i){System.Console.WriteLine($"Itisanullableintofvalue{i}");}但是,这会导致以下语法错误:CS1003:Syntaxerror,';',CS1525:Invalidexpressionterm')',CS0103:Thename'i'doesnotexistinthecurrentcontext.“i)”用红色波浪线标记。表达式在使用旧运算符时编译is:intt=42;objecttobj=t;if(to