Tag: null

为什么TimeSpan和Guid Structs可以比较为null?

我注意到一些.NET结构可以与null进行比较。 例如: TimeSpan y = new TimeSpan(); if (y == null) return; 将编译得很好(与Guid结构相同)。 现在我知道stucts是值类型,并且上面的代码不应该编译,除非有一个operator ==的重载,它接受一个对象。 但是,据我所知,没有。 我用Reflector和MSDN上的文档查看了这个类。 他们两个确实实现了以下接口: IComparable, IComparable, IEquatable 但是,尝试使用相同的接口似乎没有帮助: struct XX : IComparable, IComparable, IEquatable { public int CompareTo(Object obj) { return 0; } public int CompareTo (XX other){ return 0; } public bool Equals (XX other){ return false; } public override […]

为什么值类型不能为null

我知道可以使用Nullable值类型来包装值类型并提供存储null的能力。 但有技术原因是不允许值类型为null或原因只是概念性的?

如何检查Datarow值是否为null

请告诉我,如果需要返回string这是在DataRow中检查NULL的正确方法 Convert.ToString(row[“Int64_id”] ?? “”) 或者应该像检查DBNull.Value一样。 需要比这更小 if(row[“Int64_id”] != DBNull.Value){…}else if{}

C#:如何将null传递给期望ref的函数?

我有以下function: public static extern uint FILES_GetMemoryMapping( [MarshalAs(UnmanagedType.LPStr)] string pPathFile, out ushort Size, [MarshalAs(UnmanagedType.LPStr)] string MapName, out ushort PacketSize, ref Mapping oMapping, out byte PagesPerSector); 我想这样称呼: FILES_GetMemoryMapping(MapFile, out size, MapName, out PacketSize, null, out PagePerSector); 不幸的是,我不能在需要类型ref Mapping的字段中传递null而且没有强制转换我已尝试修复此问题。 有什么建议?

null对象与空对象

[这是最佳实践的结果:函数应该返回null还是空对象? 但我想要非常一般。 ] 在我看过的许多遗留(生产)C ++代码中,有一种趋势是编写大量的NULL (或类似)检查来测试指针。 在添加NULL时,许多这些都会在发布周期结束时添加 – 检查可以快速解决由指针引用引起的崩溃问题 – 而且没有太多时间进行调查。 为了解决这个问题,我开始编写采用( const )引用参数的代码,而不是传递指针的(更多)常见技术。 没有指针,不想检查NULL (忽略实际具有空引用的极端情况)。 在C#中,存在相同的C ++“问题”:希望检查每个未知引用对null ( ArgumentNullException )并通过添加null检查来快速修复NullReferenceException 。 在我看来,防止这种情况的一种方法是首先使用空对象( String.Empty , EventArgs.Empty )来避免空对象。 另一种方法是抛出exception而不是返回null 。 我刚开始学习F#,但看起来那个环境中的空对象要少得多。 那么也许你真的不需要有很多null引用? 我在这里吠叫错了吗?

为什么编译器至少不警告这个== null

为什么C#编译器甚至没有对此代码发出警告? : if (this == null) { // … } 显然,这种情况永远不会得到满足。

为什么C#要求您在每次触发事件时都写一个空检查?

这对我来说似乎很奇怪 – VB.NET通过其RaiseEvent关键字隐式处理空检查。 它似乎大大增加了围绕事件的样板数量,我看不出它提供了什么好处。 我确信语言设计师有充分的理由这样做..但我很好奇,如果有人知道为什么。

捕获exception本身为null!

我有一个ASP.NET应用程序。 一切都很好,但最近我得到了自己为null的exception: try { // do something } catch (Exception ex) { Logger.Log(“Error while tried to do something. Error: ” + ex.Message); } 有时ex本身就是null ! 任何的想法?

C#null-coalescing(??)运算符的运算符优先级是什么?

我刚试过以下内容,想法是连接两个字符串,用空字符串替换空值。 string a=”Hello”; string b=” World”; – 调试(有趣的是?是打印,并不完全有助于提高可读性……) ? a ?? “” + b ?? “” – >“你好” 正确的是: ? (a??””)+(b??””) “Hello World” 如果a为null,我有点期待“Hello World”,或者只是“World”。 显然,这是运算符优先级的todo,可以通过括号来克服,是否存在记录此新运算符的优先顺序的任何位置。 (意识到我应该使用stringbuilder或String.Concat) 谢谢。

如何强制执行空检查?

我正在开展一个大项目,即使有1000个自动化测试和100%代码覆盖率的10个,我们也会得到一些荒谬的错误。 我们得到的大约95%的错误是NullReferenceExceptions。 有没有办法在编译时强制执行空值检查? 除此之外,有没有办法在unit testing中自动执行空值检查而不必自己编写null案例的测试?