Tag: 可空

C#在条件语句中可为空

为什么我们在第二个陈述中需要显式演员? bool? a = null; bool b = false; bool c = true; 1.) if(b || c) a = b; else a = null; if(b || c) a = b; else a = null; 2.) a = (b || c)?(Nullable)b:null;

有没有办法将这些几乎相同的类合并为一个?

这个问题的后续问题: 为什么Nullable 被认为是结构而不是类? 我有两个类,基本上维护一个用户提供的值的元组与内部对象。 当用户提供的值的类型是基元时,我必须将它包装在Nullable以便它可以在元组中采用空值。 public class BundledClass where T : class { private Tuple _bundle; public T Value { get { return _bundle == null ? null : _bundle.Item1; } set { _bundle = new Tuple(value, internalObj); } } //… public class BundledPrimitive where T : struct { private Tuple _bundle; public T? Value […]

Casting(int?)null与new int?() – 哪个更好?

当我将值加载到类和结构中时,我需要Nullable类型,当我需要它们可以为空时,例如从数据库加载可空值(如下例所示)。 考虑以下代码片段: public class InfoObject { public int? UserID { get; set; } } // Load the ID into an SqlInt32 SqlInt32 userID = reader.GetSqlInt32(reader.GetOrdinal(“intUserID”)); 当我需要将值加载到可空属性中时,有时我会这样做: infoObject.UserID = userID.IsNull ? (int?)null : userID.Value; 有时我这样做: infoObject.UserID = userID.IsNull ? new int?() : userID.Value; 虽然它们实现了相同的结果,但我想知道是否有人知道在(int?)null和new int?()之间使用哪个更好的性能,最小的IL代码,最佳实践等? 一般来说我一直偏爱上面代码的new int?()版本,但是我不确定对于编译器来说,cast (int?)null是否比new int?()更快。 干杯!

Nullable 是不可能的,为什么不呢?

对不起,如果它是一个愚蠢的问题,我试图更好地了解.Net中的Nullable类型。 从我注意到的Microsoft源代码(使用ReSharper),我知道Nullable是一个结构,T需要是一个结构 public struct Nullable where T : struct 现在,我试着做这样的事情 public struct CustomNullable where T : struct { } public class CustomNullableClass where T : struct { } 我编译时遇到错误: Nullable a = null; Nullable<Nullable> a1 = null; 对于上面提到的代码,我得到一个错误’只有非可空的值类型可能是System.Nullable的基础’,但是如何在Nullable类型中强制执行? 并为 CustomNullable a2 = null; CustomNullableClass a3 = null; 我得到一个错误’类型System.Nullable必须是不可为空的值类型才能将其用作参数T’。 我现在有点困惑,有人可以帮助我理解发生了什么或者我不明白的东西? 非常感谢提前。 编辑:如果结构是值类型而值类型不能为null,那么Nullable如何成为结构? 信用:消费者

为什么Nullable 不匹配作为generics约束的引用类型

可能重复: Nullable类型作为通用参数可能吗? 我遇到了generics类型约束非常奇怪的事情。 我有一个这样的课: public SomeClass where T:class { } 但是,我发现我不能像我期望的那样使用可空类型: new SomeClass(); 我得到一个int?的错误int? 必须是参考类型。 Nullable真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?

Nullable 是“预定义的值类型” – 或者Equals()和==如何在这里工作?

对于我自己实现的Equals()方法,我想检查一堆内部字段。 我是这样做的: … _myNullableInt == obj._myNullableInt && _myString == obj._myString && … 我假设,这比较值,包括null,对于相等而不是对象地址(作为参考euqality比较操作会),因为: 对于此MSDN文档中的 “预定义值类型” ,可以这样说 。 我假设Nullable是这样的“预定义值类型”,因为它根据此MSDN文档位于System命名空间中。 我是否正确地假设VALUES在这里进行比较? 注意:unit testing显示“是”,但我希望其他人对这个问题感到放心,以防我错过了什么。

MVC 3不绑定可空长

我创建了一个测试网站来调试我遇到的问题,看起来我要么传递JSON数据错误,要么MVC无法绑定可空的longs。 当然,我正在使用最新的MVC 3版本。 public class GetDataModel { public string TestString { get; set; } public long? TestLong { get; set; } public int? TestInt { get; set; } } [HttpPost] public ActionResult GetData(GetDataModel model) { // Do stuff } 我发布了一个具有正确JSON内容类型的JSON字符串: { “TestString”:”test”, “TestLong”:12345, “TestInt”:123 } 长期没有约束,它总是空的。 如果我把这个值放在引号中,它就可以工作,但我不应该这样做,我应该吗? 我需要为该值设置自定义模型绑定器吗?

比较可空的日期时间对象

我有两个可以为空的日期时间对象,我想比较两者。 最好的方法是什么? 我已经尝试过了: DateTime.Compare(birthDate, hireDate); 这是一个错误,也许是期望System.DateTime类型的日期,我有Nullable日期时间。 我也尝试过: birthDate > hiredate… 但结果不如预期……任何建议?

可以为空的对象必须有值吗?

在线: bool travel = fill.travel.Value; 我收到以下错误: 可以为空的对象必须具有值 而且我不确定为什么。 我想要做的就是获取当前错误的旅行数据库中的值。 任何帮助,将不胜感激。 using (var db = new DataClasses1DataContext()) { var fill = (from f in db.expenseHdrs where f.rptNo == getPkRowReport() select f).FirstOrDefault(); txtReportDesc.Text = fill.description; txtPeriod.Text = fill.period; txtPurpose.Text = fill.purpose; bool travel = fill.travel.Value; chkTravel.Checked = travel }

为什么我不能写Nullable <Nullable >?

Nullable的定义是: [SerializableAttribute] public struct Nullable where T : struct, new() where T : struct意味着T只能是值类型的约束。 所以我很清楚我不能写: Nullable a; //error. makes sense to me 因为string是引用类型,而不是值类型。 但我真的不明白为什么我不能写 Nullable<Nullable> b; //error. but why? 为什么不允许? 毕竟, Nullable是一个值类型,因此,它可以是Nullablle类型参数。 当我在ideone上编译它时,它会出现此错误( ideone ): 错误CS0453:类型’int?’ 必须是非可空值类型才能在generics类型或方法’System.Nullable’中将其用作类型参数’T’编译失败:1个错误,0个警告