![](/img/trans.png)
[英]What is the shortest way to check a LONG written function for a valid output first (not null), and then to use it several times
[英]Shortest null check in c#
有没有更短的方法在c# 中写这个:
if(myobject!=null){
}
在JavaScript 中,我们可以这样做:
if(myobject){
}
免责声明:我知道这在 JavaScript 中也会匹配 'true'。 这只会用于应该是特定类型对象的变量。
我发现了一些类似的问题,但他们提出的问题略有不同:
您可以通过operator
在 C# 中获得相同的语法:
public class MyClass {
...
// True if instance is not null, false otherwise
public static implicit operator Boolean(MyClass value) {
return !Object.ReferenceEquals(null, value);
}
}
....
MyClass myobject = new MyClass();
...
if (myobject) { // <- Same as in JavaScript
...
}
C# 语言哲学与 JavaScript 完全不同。 C# 通常会强制您对某些事情更加明确,以防止一些常见的编程错误(我相信这也有助于简化编译器设计和测试)。
如果 C# 允许这种隐式转换为布尔值,那么您很可能会遇到这样的编程错误:
if(myobject = otherObject)
{
...
}
您在其中进行了分配而不是平等检查。 通常 C# 会防止此类错误(因此,尽管 Dmitry 的回答很聪明,但我建议不要这样做)。
var myobject = notNullValue ?? nullValue;
很抱歉使用答案而不是评论。 我还没有足够的声誉发表评论。
我只是想知道,现在几年之后,Dmitry Bychenko的回答是否仍然准确? 我的搜索没有发现任何更近期的文章或问题,但它看起来像是一个简单的东西
if (value) // like JavaScript
... do thing
现在会存在于C#......
如果你想抛出一个ArgumentNullException
例如检查方法参数,有一个方便的单行代码来做到这一点:
_ = x ?? throw new ArgumentNullException(nameof(x));
在这里,我们尝试将参数分配给丢弃_
运算符。 ??
-operator 执行空检查。 如果变量为空,则抛出异常。
在 Visual Studio 中,您可以添加自定义代码段以将此行绑定到快捷方式arg0
。 您只需要输入arg0
,双击 TAB 键,然后输入参数名称。 实现空检查只需要 2 秒。
这是片段。 要将其导入 Visual Studio,请使用本指南: https : //docs.microsoft.com/de-de/visualstudio/ide/walkthrough-creating-a-code-snippet?view=vs-2019
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Argument null check for parameters</Title>
<Shortcut>arg0</Shortcut>
</Header>
<Snippet>
<Code Language="CSharp">
<![CDATA[_= $param$ ?? throw new ArgumentNullException(nameof($param$));]]>
</Code>
<Declarations>
<Literal>
<ID>param</ID>
<ToolTip>Name of the parameter.</ToolTip>
<Default>x</Default>
</Literal>
</Declarations>
</Snippet>
</CodeSnippet>
您可以使用对象类静态方法 ReferenceEquals 方法来确定引用是否为空
MyClass1 obj = new MyClass1();
if (object.ReferenceEquals(obj,null))
{
Console.Write("obj ref is null");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.