C# 的行为是NullReferenceException
在调用instance.MethodName()
时抛出instance
空值。
对于扩展方法(如),在技术上可以编写在为 null的情况下SingleOrDefault
不会抛出的方法。例如: NullReferenceException
instance
public static class MyExtensions
{
public static string SmartToString(this object instance)
{
if(instance == null)return "";
return instance.ToString()
}
}
虽然这是一种非常不常见的方法,因为它通常会让那些阅读这样的代码的人大吃一惊:
var instance = null;
// .. several lines later
instance.SmartToString();// why exception is not thrown?? how does this code work at all? ... oh, I see ... that's lame ..
回到你的问题。 SingleOrDefault
像它应该的那样实现:如果instance
为空 - 抛出异常。这就是为什么您必须通过以下代码确保Tag
不为空:
if(runningInstance.Tag != null)
{
cmd.Parameters.AddWithValue("@Name", runningInstance.Tag.SingleOrDefault(t => t.Key == "Name").Value);
}
else
{
Console.WriteLine("Tag is null!");
}
希望有帮助。