1
if (statement)
     base.Database.AddInParameter(command, "ColumnX", DbType.String, "StackOverflow");
 else
     base.Database.AddInParameter(command, "ColumnX", DbType.String, DBNull.Value);

を使用して、このステートメントを1行で実行したい

? "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

このようにしないのはなぜですか(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();

優れている。

于 2012-08-02T19:36:59.280 に答える
5

まず、条件演算子ifの前(statement)は必要ありません。

第二に、条件の両側が同じ型または一方が他方に暗黙的に変換可能な型である必要があるため、それを使用することはできません-stringそしてDBNull.Valueそのような型ではありません。

またはのいずれかにキャストすると、次のように使用できます。stringDBNull.Valueobject

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

ただし、これを 1 行で読まなければならない場合、投稿した元のバージョンよりも読みにくくなります。特に、読みやすさが低下し、コードが読みにくくなる場合は、このロジックを 1 行にまとめても意味がありません。理解する。

于 2012-08-02T19:38:22.183 に答える
4

項演算子は代入に対してのみ機能します。

代わりにできることは次のとおりです。

var value = statement ? (object)"StackOverflow" : DBNull.Value;
base.Database.AddInParameter(command, "Column X", DbType.String, value);

もちろん、これを 1 つのステートメントに結合することもできます (ただし、適切にフォーマットすると、実際にはより多くの行になります)。

base.Database.AddInParameter(
    command,
    "Column X",
    DbType.String,
    statement ? (object)"StackOverflow" : DBNull.Value);
于 2012-08-02T19:40:05.933 に答える
2

DBNull の文字列のみを切り替える場合は、次の行に沿って、その var を置き換えるだけです。

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

base.Database.AddInParameter(command, "ColumnX", DbType.String, theReplacement);
于 2012-08-02T19:39:07.220 に答える
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 に答える