if (statement)
base.Database.AddInParameter(command, "ColumnX", DbType.String, "StackOverflow");
else
base.Database.AddInParameter(command, "ColumnX", DbType.String, DBNull.Value);
我想使用
在一行中执行此语句? "true" : "false"
例如:
if(statement) ? base.Database.AddInParameter(command, "ColumnX", DbType.String, "StackOverflow") : base.Database.AddInParameter(command, "ColumnX", DbType.String, DBNull.Value);
但事实并非如此。 Visual Studio说出了“:”
的意外标记任何想法?感谢
答案 0 :(得分:6)
为什么不这样做(为了SO,我将它包裹在很多行上)?
base.Database.AddInParameter(
command,
"ColumnX",
DbType.String,
statement ? "StackOverflow" : (Object)DBNull.Value);
您的尝试无效C#。如果真的希望按照自己的方式进行,并在一行中使用if...else
,则需要如下:
if(statement) base.Database.AddInParameter(command, "ColumnX", DbType.String, "StackOverflow"); else base.Database.AddInParameter(command, "ColumnX", DbType.String, DBNull.Value);
但这很难读。
即使很短:if (true) DoOne(); else DoTwo();
并不那么容易。
if (true)
DoOne();
else
DoTwo();
更好。
答案 1 :(得分:5)
首先,conditional operator不需要if
之前的(statement)
。
其次,你不能使用它作为条件的两边需要是一个类型或类型,其中一个可以隐式转换为另一个 - string
和DBNull.Value
不是这样的类型。
如果您将string
或DBNull.Value
投放到object
base.Database.AddInParameter(
command,
"ColumnX",
DbType.String,
statement ? "StackOverflow" : (object)DBNull.Value);
但是,如果我必须在一行中阅读此内容,我会发现它比您发布的原始版本更少可读 - 将这个逻辑放在一行中是没有价值的,特别是如果它降低了可读性并使代码不易理解。
答案 2 :(得分:4)
ternary operator仅适用于作业。
你可以做的是:
var value = statement ? (object)"StackOverflow" : DBNull.Value;
base.Database.AddInParameter(command, "Column X", DbType.String, value);
当然,您也可以将它组合成一个语句(但如果你很好地格式化它实际上就是更多的行):
base.Database.AddInParameter(
command,
"Column X",
DbType.String,
statement ? (object)"StackOverflow" : DBNull.Value);
答案 3 :(得分:2)
在开头取出if,以便读取。
statement ? base.Database.AddInParameter(command, "ColumnX", DbType.String,"StackOverflow") : base.Database.AddInParameter(command,"ColumnX", DbType.String, DBNull.Value);
答案 4 :(得分:2)
如果你只是为DBNull切换一个字符串,你应该只需要替换那个var:
var theReplacement = (statement ? (object)"StackOverflow" : DBNull.Value);
base.Database.AddInParameter(command, "ColumnX", DbType.String, theReplacement);