Tag: nullable

在构建将operator ==提升为可空的表达式时,为什么generics和非generics结构的处理方式不同?

这看起来像是在通用结构上提升为操作数的null的错误。 考虑以下伪结构,它覆盖operator== : struct MyStruct { private readonly int _value; public MyStruct(int val) { this._value = val; } public override bool Equals(object obj) { return false; } public override int GetHashCode() { return base.GetHashCode(); } public static bool operator ==(MyStruct a, MyStruct b) { return false; } public static bool operator !=(MyStruct a, MyStruct b) […]

解析为Nullable Enum

我试图将字符串解析回MyEnum类型的可空属性。 public MyEnum? MyEnumProperty { get; set; } 我在线收到错误: Enum result = Enum.Parse(t, “One”) as Enum; // Type provided must be an Enum. Parameter name: enumType 我在下面有一个示例控制台测试。 如果我在属性MyEntity.MyEnumProperty上删除nullable,则代码有效。 除了通过reflection之外,如何在不知道typeOf枚举的情况下使代码工作? static void Main(string[] args) { MyEntity e = new MyEntity(); Type type = e.GetType(); PropertyInfo myEnumPropertyInfo = type.GetProperty(“MyEnumProperty”); Type t = myEnumPropertyInfo.PropertyType; Enum result = Enum.Parse(t, […]

generics和可空类型

假设我有一个方法,将int作为字符串,如果解析成功则返回int,否则返回null值。 int? ParseValue(string intAsString) { int i; if (int.TryParse(intAsString, out i)) return i; return null; } 如何重写这个方法,使它不仅可以用于int?,还可以用long ?, decimal? 和日期时间? ?

隐式转换Null-Coalescing运算符结果

通过以下对C#中的空合并运算符(??)的理解。 int? input = -10; int result = input ?? 10;//Case – I //is same as: int result = input == null? input : 10; // Case – II 而根据定义和用法,案例I和案例II是相同的。 令人惊讶的是,在Case-I编译器能够隐式转换int? to case而在Case-II中它显示错误:’错误1无法隐式转换类型’int?’ ‘int’“ 关于null-coalescing运算符,我错过了什么? 谢谢你的关注。

为什么Nullable 是一个结构?

我想知道为什么Nullable是一个值类型,如果它被设计为模仿引用类型的行为? 我理解GC压力之类的东西,但我不相信 – 如果我们想让int表现得像参考,我们可能会对所有具有真实参考类型的后果感到满意。 我看不出为什么Nullable不仅仅是T struct的盒装版本。 作为价值类型: 它仍然需要装箱和取消装箱,而且更多,装箱必须与“普通”结构有点不同(对待像null值一样的null值可null ) 检查null时需要区别对待 (仅在Equals完成,没有真正的问题) 它是可变的,打破了结构应该是不可变的规则 (好吧,它在逻辑上是不可变的) 它需要有特殊限制来禁止Nullable<Nullable>等递归 是否使Nullable成为引用类型解决问题? 改写和更新: 我已经修改了我的理由列表,但我的一般问题仍然是开放的: 引用类型Nullable将如何比当前值类型实现更糟糕? 这只是GC的压力和“小的,不可改变的”规则吗? 它对我来说仍然很奇怪……

拳击/拆箱可空类型 – 为什么这个实施?

通过C#在Boxing / Unboxing值类型上从CLR中提取… 在Boxing上:如果可空实例不为null ,则CLR将该值从可空实例中取出并将其装箱。 换句话说,值为5的Nullable 被装入一个值为5的boxed-Int32 。 在取消装箱:取消装箱只是获取对盒装对象的未装箱部分的引用的行为。 问题是盒装值类型不能简单地拆箱成该值类型的可空版本,因为盒装值中没有boolean hasValue字段。 因此,当将值类型拆箱为可空版本时,CLR必须分配Nullable 对象,将hasValue字段初始化为true ,并将value字段设置为盒装值类型中的相同值。 这会影响您的应用程序性能(拆箱期间的内存分配)。 为什么CLR团队为Nullable类型经历了这么多麻烦? 为什么不首先将它装入Nullable ?

检查inside方法是否传递了一些可选参数

如何检查是否将可选参数传递给方法? public void ExampleMethod(int required, string optionalstr = “default string”, int optionalint = 10) { if (optionalint was passed) return; } 另一种方法是使用Nullable.HasValue ( MSDN定义 , MSDN示例 ): int default_optionalint = 0; public void ExampleMethod(int required, int? optionalint, string optionalstr = “default string”) { int _optionalint = optionalint ?? default_optionalint; }

C#.Net中的可选返回

Java 1.8正在接收Optional类,它允许我们明确说明方法何时可以返回null值并“强制”其使用者在使用它之前validation它是否为null( isPresent() )。 我看到C#有Nullable,它做的类似,但基本类型。 它似乎用于数据库查询,以区分值何时存在,并且当它不存在时为0并且为空。 但似乎C#的Nullable不适用于对象,仅适用于基本类型,而Java的Optional仅适用于对象而不适用于基本类型。 在C#中是否有Nullable / Optional类,这迫使我们在提取和使用它之前测试对象是否存在?

如何从数据库中获取可以为空的DateTime

我的SQL Server数据库包含可空的DateTime值。 如何在C#中的应用程序中将它们转换为可以为空的DateTime对象? 这是我认为它会是什么样子,但它没有: DateTime? dt = (DateTime?) sqldatareader[0];

在C#中使用条件运算符键入结果

我试图使用条件运算符,但我对它认为结果应该是的类型挂了。 下面是一个我设法表明我遇到的问题的例子: class Program { public static void OutputDateTime(DateTime? datetime) { Console.WriteLine(datetime); } public static bool IsDateTimeHappy(DateTime datetime) { if (DateTime.Compare(datetime, DateTime.Parse(“1/1”)) == 0) return true; return false; } static void Main(string[] args) { DateTime myDateTime = DateTime.Now; OutputDateTime(IsDateTimeHappy(myDateTime) ? null : myDateTime); Console.ReadLine(); ^ } | } | // This line has the compile […]