在C#7中我们可以使用
if (x is null) return;
Run Code Online (Sandbox Code Playgroud)
代替
if (x == null) return;
Run Code Online (Sandbox Code Playgroud)
使用新方法(前一个例子)比旧语法有什么好处吗?
语义学有什么不同?
只是品味问题?如果没有,何时使用一个或另一个.
参考.
我想阻止对象的进一步处理,如果它是null.
在下面的代码中,我通过以下任一方法检查对象是否为null:
if (!data.Equals(null))
Run Code Online (Sandbox Code Playgroud)
和
if (data != null)
Run Code Online (Sandbox Code Playgroud)
不过,我收到NullReferenceException的dataList.Add(data).如果对象为null,则它应该永远不会进入if-statement!
因此,我问这是否是检查对象是否为null的正确方法:
public List<Object> dataList;
public bool AddData(ref Object data)
bool success = false;
try
{
// I've also used "if (data != null)" which hasn't worked either
if (!data.Equals(null))
{
//NullReferenceException occurs here ...
dataList.Add(data);
success = doOtherStuff(data);
}
}
catch (Exception e)
{
throw new Exception(e.ToString());
}
return success;
}
Run Code Online (Sandbox Code Playgroud)
如果这是检查对象是否为null的正确方法,那么我做错了什么(如何防止对对象进一步处理以避免NullReferenceException)?
我很好奇是否有一种方法this可以在C#中的虚方法中为null.我认为这是不可能的.我在现有代码中看到,在代码审查期间,我希望100%肯定对其删除进行评论,但我想要一些确认和社区的更多上下文.this != null在任何非静态/实例方法中都是这种情况吗?否则它会是一个空指针异常对吗?我正在考虑扩展方法以及我可能不熟悉多年Java的C#特性.
有没有人喜欢如何检查一个值是DBNull什么?我发现这两个陈述给了我想要的结果,但只是想知道是否有偏好?
if (any is System.DBNull)
与...一样:
if (any == System.DBNull.Value)
谢谢!
所以我有这段代码,如果我在return语句上断点,立即窗口输出下面的信息.
try
{
await connection.OpenAsync();
var obj = await cmd.ExecuteScalarAsync();
return obj != null ? Int32.Parse(obj.ToString()) != 1 : false;
}
catch (Exception ex)
{
Log.Error("An error has occurred checking a customer/product authorization.", ex);
return false;
}
finally
{
connection.Close();
}
Run Code Online (Sandbox Code Playgroud)
存储过程
以下是存储过程的相关部分.@HasAuthTable和@IsAuthorized属于这种类型bit.
SELECT (CASE WHEN @HasAuthTable = 0 THEN 1 ELSE 0 END) | @IsAuthorized AS IsAuthorized
Run Code Online (Sandbox Code Playgroud)
即时窗口
obj
0
obj == null
false
obj != null
false
obj == 0
error CS0019: …Run Code Online (Sandbox Code Playgroud)