Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#?运算符语法_C#_Operators - Fatal编程技术网

C#?运算符语法

C#?运算符语法,c#,operators,C#,Operators,一个简单的问题: 在C#中是否有这种操作的语法: 如果为条件,则返回对象本身:默认值 如下面的示例所示,但我不想对myObject求值两次(这可能是更复杂的事情,比如数据库查询): 我知道在检查null(如下面的示例中)时有相应的语法,但是否有用于检查任何不同值的语法,如本例中的DBNull.value int myVar = Convert.ToInt32(myObject ?? 0); 您不必对对象求值两次。计算对象,将其存储在变量中,并对结果变量进行检查 你的问题的答案是不,你不能随

一个简单的问题:

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

  • 如果为条件,则返回对象本身:默认值
如下面的示例所示,但我不想对myObject求值两次(这可能是更复杂的事情,比如数据库查询):

我知道在检查null(如下面的示例中)时有相应的语法,但是否有用于检查任何不同值的语法,如本例中的DBNull.value

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

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

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

否:

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中使用,因此您甚至一开始就不会得到DBNull。

所以您说这不会在db查询中出现两次:int i=(dt.Compute(“MAX(Column)”,string.Empty)=DBNull.Value?0:dt.Compute(“MAX(Column)”,string.Empty));我知道我可以将它存储在一个临时变量中,但我希望我可以在一行代码中完成这一切:)是的,但我假设
myObject
是一个变量的名称。所以您应该已经完成了
var myObject=dt.Compute(“MAX(Column)”,string.Empty)
您可以使用函数
intmyvar=DBObjectToInt(dt.Compute(“MAX(Column)”,string.Empty))
另一个选项正在SQL中使用,因此您一开始甚至不会得到一个
DBNull
。我知道我可以将它存储在一个临时变量中,但我希望我可以在一行代码中完成这一切:)
int myVar = DBObjectToInt(myObject);

public static int DBObjectToInt(object dbObj)
{
  return dbObj == DBNull.Value ? 0 : (int)dbObj;
}