-2

一个简单的问题:

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

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

就像下面的例子一样,但我不想评估 myObject 两次(这可能是一些更复杂的事情,比如数据库查询):

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

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

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

2 回答 2

1

您不必对对象进行两次评估。评估对象,将其存储在变量中,并对结果变量进行检查。

您的问题的答案是否定的,您不能随心所欲地用 C# 创建自己的迷你语言。最常见的操作有快捷方式,但自定义三元一元运算符不是其中之一。

于 2012-12-04T09:04:40.870 回答
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;
}

另一种选择是Coalesce在您的 SQL 中使用,因此您甚至不会首先获得 DBNull。

于 2012-12-04T09:09:16.697 回答