Questions tagged «null-coalescing-operator»

null-coalescing运算符(PHP 7中的??)用于为可为空的值类型或引用类型定义默认值。如果操作数不为null,则返回左侧的操作数;否则,返回左侧的操作数。否则返回正确的操作数。



5
好奇的空值销售员自定义隐式转换行为
注意:这似乎已在罗斯林(Roslyn)中修复 在写我对这个问题的答案时,出现了这个问题,它讨论了null结点运算符的结合性。 提醒一下,null-coalescing运算符的想法是该形式的表达式 x ?? y 首先评估x,然后: 如果的值为xnull,y则求值,这是表达式的最终结果 如果值x是非空,y则不评估,的值x是表达的最终结果,转换到编译时间类型的后y如果需要的话 现在通常不需要转换,或者只是从可为null的类型到不可为null的类型的转换-通常类型是相同的,或者只是从(say)int?到int。但是,您可以创建自己的隐式转换运算符,并在必要时使用它们。 对于的简单情况x ?? y,我还没有看到任何奇怪的行为。但是,随着(x ?? y) ?? z我看到一些令人困惑的行为。 这是一个简短但完整的测试程序-结果在注释中: using System; public struct A { public static implicit operator B(A input) { Console.WriteLine("A to B"); return new B(); } public static implicit operator C(A input) { Console.WriteLine("A to C"); return new …


11
是否有Python等效于C#null-coalescing运算符?
在C#中,有一个null-coalescing运算符(写为??),允许在赋值期间轻松(简短)进行null检查: string s = null; var other = s ?? "some default value"; 有python等效项吗? 我知道我可以做到: s = None other = s if s else "some default value" 但是,还有没有更短的方法(我不需要重复s)?


10
?? 合并为空字符串?
我发现自己做的越来越多的事情是检查字符串是否为空(如in ""或null)和条件运算符。 当前示例: s.SiteNumber.IsNullOrEmpty() ? "No Number" : s.SiteNumber; 这只是一个扩展方法,它等效于: string.IsNullOrEmpty(s.SiteNumber) ? "No Number" : s.SiteNumber; 由于它是空的而不是null,??因此不会解决问题。一个string.IsNullOrEmpty()版本的??将是完美的解决方案。我在想必须有一种更清洁的方法(我希望!),但是我一直茫然地找不到它。 有谁知道这样做的更好方法,即使仅在.Net 4.0中也是如此?

16
使用Null合并运算符的独特方法
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2个月前关闭。 改善这个问题 我知道在C#中使用Null合并运算符的标准方法是设置默认值。 string nobody = null; string somebody = "Bob Saget"; string anybody = ""; anybody = nobody ?? "Mr. T"; // returns Mr. T anybody = somebody ?? "Mr. T"; // returns "Bob Saget" 但是还有什么??用呢?它看起来不像三元运算符有用,除了比以下内容更简洁和易于阅读之外: nobody = null; anybody = nobody == null ? "Bob Saget" …


10
检查空值的正确方法是什么?
我喜欢null-coalescing运算符,因为它使为可为null的类型分配默认值变得容易。 int y = x ?? -1; 很好,除非我需要使用做一些简单的事情x。例如,如果我想检查Session,那么我通常最终不得不写一些更冗长的东西。 我希望我可以这样做: string y = Session["key"].ToString() ?? "none"; 但是您不能,因为在.ToString()null检查之前调用gets,所以如果Session["key"]为null 则失败。我最终这样做: string y = Session["key"] == null ? "none" : Session["key"].ToString(); 我认为,此方法行之有效,并且比三行方法更好: string y = "none"; if (Session["key"] != null) y = Session["key"].ToString(); 即使这样行​​得通,但我仍然好奇是否有更好的方法。似乎我总是必须Session["key"]两次引用。一次检查,再一次分配。有任何想法吗?


12
空合并运算符是否有“对立”?(...用任何语言?)
空合并大致可转换为 return x, unless it is null, in which case return y 我经常需要 return null if x is null, otherwise return x.y 我可以用 return x == null ? null : x.y; 不错,但是null中间总是困扰着我-似乎是多余的。我更喜欢这样的东西return x :: x.y;,::只有在它之前的东西不在时,它后面的才被评估null。 我认为这是几乎与简洁,内联零检查的对面空聚结,那种复杂的,但我[ 近 ]一定会出现在C#中没有这样的运营商。 是否还有其他具有这种运算符的语言?如果是这样,它叫什么? (我知道我可以在C#中为它编写一个方法;我使用return NullOrValue.of(x, () => x.y);,但是如果您有更好的东西,我也想看看。)

4
表达式树lambda不得包含空传播运算符
问题:price = co?.price ?? 0,以下代码中的行给了我上面的错误。但是如果我?从中删除,co.?效果很好。我试图按照此MSDN例如,他们使用的是?上线select new { person.FirstName, PetName = subpet?.Name ?? String.Empty };所以,看来我需要了解什么时候使用?与??和何时不。 错误: 表达式树lambda不得包含空传播运算符 public class CustomerOrdersModelView { public string CustomerID { get; set; } public int FY { get; set; } public float? price { get; set; } .... .... } public async Task<IActionResult> ProductAnnualReport(string rpt) { …

3
是什么 ?[]?C#中的语法?
虽然我正在研究委托其是实际上是一个抽象类中Delegate.cs,我看到了下面的方法中,我不明白 为什么返回值?已经使用了reference(class)类型,为什么要使用 ?[]? 参数含义 你能解释一下吗? public static Delegate? Combine(params Delegate?[]? delegates) { if (delegates == null || delegates.Length == 0) return null; Delegate? d = delegates[0]; for (int i = 1; i < delegates.Length; i++) d = Combine(d, delegates[i]); return d; }


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.