C# ?运算符语法

时间:2012-12-04 09:03:17

标签: c# operators

一个简单的问题:

C#中是否有这种操作的语法:

  • 如果是条件,则返回对象本身:默认值

与下面的示例类似,但我不想两次评估myObject(这可能是一些更复杂的事情,如数据库查询):

int myVar = (myObject == DBNull.Value ? 0 : (int)myObject);

我知道在检查null时会有这样的语法(如下例所示),但在这种情况下是否可以检查任何不同的值,如DBNull.Value?

int myVar = Convert.ToInt32(myObject ?? 0);

2 个答案:

答案 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。