1
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 说“:”的意外标记

任何的想法?谢谢

4

5 回答 5

6

为什么不这样做(我将它包裹在很多行中)?

 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();

更好。

于 2012-08-02T19:36:59.280 回答
5

首先,条件运算符不需要ifbefore 。(statement)

其次,您不能使用它,因为条件的双方都需要是相同的类型或一个可以隐式转换为另一个的类型 -string并且DBNull.Value不是这样的类型。

如果您将or转换为,则可以使用它:stringDBNull.Valueobject

base.Database.AddInParameter(
                             command, 
                             "ColumnX", 
                             DbType.String, 
                             statement ? "StackOverflow" : (object)DBNull.Value);

但是,如果我必须在一行中阅读此内容,我会发现它可读性不如您发布的原始版本 - 将这种逻辑放在一行中没有任何价值,特别是如果它降低了可读性并使代码不易阅读理解。

于 2012-08-02T19:38:22.183 回答
4

三元运算符仅适用于赋值。

你可以做的是:

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);
于 2012-08-02T19:40:05.933 回答
2

把开头的 if 去掉,这样就可以读取了。

statement ? base.Database.AddInParameter(command, "ColumnX", DbType.String,"StackOverflow") : base.Database.AddInParameter(command,"ColumnX", DbType.String, DBNull.Value); 
于 2012-08-02T19:38:37.057 回答
2

如果您只是为 DBNull 切换字符串,则应该按照以下方式替换该 var:

var theReplacement = (statement ? (object)"StackOverflow" : DBNull.Value);

base.Database.AddInParameter(command, "ColumnX", DbType.String, theReplacement);
于 2012-08-02T19:39:07.220 回答