一个简单的问题:
C#中是否有这种操作的语法:
与下面的示例类似,但我不想两次评估myObject(这可能是一些更复杂的事情,如数据库查询):
int myVar = (myObject == DBNull.Value ? 0 : (int)myObject);
我知道在检查null时会有这样的语法(如下例所示),但在这种情况下是否可以检查任何不同的值,如DBNull.Value?
int myVar = Convert.ToInt32(myObject ?? 0);
答案 0 :(得分:1)
您不必两次评估对象。评估对象,将其存储在变量中,并对结果变量进行检查。
你的问题的答案是否定的,你不能只是随心所欲地用C#创建自己的迷你语言。对于最常见的操作有快捷方式,但是自定义三元一元运算符不是一个。
答案 1 :(得分:1)
没有
int myVar = myObject == DBNull.Value ? 0 : (int)myObject;
你能做的最好吗?它没有将对象重新评估两次,因为它被提到两次。
或者将它包装在一个函数当然:
int myVar = DBObjectToInt(myObject);
public static int DBObjectToInt(object dbObj)
{
return dbObj == DBNull.Value ? 0 : (int)dbObj;
}
另一个选择是在SQL中使用Coalesce
,因此您甚至不会首先获得DBNull。