5

この foreach セクションがあり、「result = string.Format」の後に行を追加しようとしていますが、次のエラーが表示されます「代入、呼び出し、増分、減分、待機、および新しいオブジェクト式のみをステートメントとして使用できます"誰かが私が間違っていることを教えてもらえますか.

foreach (DataRow record in table.Rows)
{
    string key = record["Code"] + "_" + record["Description"];
    int row = (int)rownum[key];

    string date = formatDate(record["ApptDate"].ToString(), "_");

    string result = string.Empty;
    if (record["Dosage"].ToString() != string.Empty)
        result = string.Format("{0}/{1}", test.SharedLib.Application.RemoveTrailingZeroes(record["Dosage"].ToString()), 
                                          test.SharedLib.Application.RemoveTrailingZeroes(record["Units"].ToString()));
    if (record["Dosage"].ToString() != string.Empty)
        result.StartsWith("/") && result.EndsWith("/") ? result.Replace("/", string.Empty) : result;
    else if (record["Units"].ToString() != string.Empty)
        result = record["Units"].ToString();

    dataTable.Rows[row]["ApptDate" + date] = result;
}
4

4 に答える 4

5
if (record["Dosage"].ToString() != string.Empty)
    result.StartsWith("/") && result.EndsWith("/") ? result.Replace("/", string.Empty) : result;

2 行目はステートメントではなく、式です。すべての式が C# のステートメントになるわけではないため、これは構文エラーです。

おそらく、この結果を に代入するつもりでしたresult:

if (record["Dosage"].ToString() != string.Empty)
    result = (result.StartsWith("/") && result.EndsWith("/")) ? result.Replace("/", string.Empty) : result;

ifさらに、 /elseブロックの本体を中括弧 ( ) で囲むことを検討する必要があります{}。ブレースがないと、これらのブロックが入れ子になる方法は直感的ではなく、将来のメンテナンスが妨げられます。(例えば、そのブロックがどのifブロックelse ifに属するか、あなたは分かりますか? このプロジェクトを引き継ぐ次の人は、違いを見分けるだけでなく、ネストが意図されていたことを理解できるでしょうか? 明示してください!)

于 2013-07-23T20:23:37.220 に答える
1

式の結果で何かをする必要があります (たとえば、result に代入しますか?!)

詳細については、実際にフォーマットして、コードについて詳しく教えてください...SOユーザーはあなたの個人的なコンパイラ/デバッガではありません;-)

于 2013-07-23T20:23:29.347 に答える
0
result.StartsWith("/") && result.EndsWith("/") ? result.Replace("/", string.Empty) : result;

この行は、三項演算子の結果に対して何も行いません。それを結果に割り当てたいと思います

于 2013-07-23T20:24:01.597 に答える