if子句使用?

Sta*_*ser 1 c# if-statement

if (statement)
     base.Database.AddInParameter(command, "ColumnX", DbType.String, "StackOverflow");
 else
     base.Database.AddInParameter(command, "ColumnX", DbType.String, DBNull.Value);
Run Code Online (Sandbox Code Playgroud)

我想通过使用在一行中做这个声明

? "true" : "false" 
Run Code Online (Sandbox Code Playgroud)

例如:

if(statement) ? base.Database.AddInParameter(command, "ColumnX", DbType.String, "StackOverflow") : base.Database.AddInParameter(command, "ColumnX", DbType.String, DBNull.Value);
Run Code Online (Sandbox Code Playgroud)

但是这是错误的.Visual Studio说出了":"的意外标记

任何的想法?谢谢

Dav*_*haw 6

为什么不这样做(为了SO而把它包裹在很多行上)?

 base.Database.AddInParameter(
    command, 
    "ColumnX", 
    DbType.String, 
    statement ? "StackOverflow" : (Object)DBNull.Value);
Run Code Online (Sandbox Code Playgroud)

您的尝试无效C#.如果你真的想按照自己的方式去做并使用if...else一行,那就需要:

if(statement) base.Database.AddInParameter(command, "ColumnX", DbType.String, "StackOverflow"); else base.Database.AddInParameter(command, "ColumnX", DbType.String, DBNull.Value);
Run Code Online (Sandbox Code Playgroud)

但这很难读.

即使if (true) DoOne(); else DoTwo();是做空:也不是那么容易.

if (true) 
    DoOne(); 
else 
    DoTwo();
Run Code Online (Sandbox Code Playgroud)

更好.

  • 这不行.String和`DBNull.Value`不能相互转换. (3认同)
  • DBNull.Value不是字符串.首先将它转换为`object`可能会有效. (3认同)
  • @StackUser,试试`声明?"StackOverflow":( object)DBNull.Value` (3认同)

Ode*_*ded 5

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

其次,你不能使用它作为条件的两边需要是一个类型或类型,其中一个可以隐式转换为另一个 - stringDBNull.Value不是这种类型.

可以使用它,如果你施放无论是stringDBNull.Valueobject:

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

但是,如果我必须在一行上阅读它,我会发现它比你发布的原始版本更不易读 - 将这个逻辑放在一行中是没有价值的,特别是如果它降低了可读性并使代码不那么容易了解.