1

null 合体演算子を foreach ループで動作させる方法を見つけようとしています。

文字列の末尾を確認し、それに基づいて特定のメソッドにルーティングします。主に言いたいことは……。

foreach (String s in strList)
{
    if s.EndsWith("d") ?? Method1(s) ?? Method2(s) ?? "Unknown file type";
}

これを行おうとすると、もちろん「演算子 ?? は bool 型および string 型では使用できません」というメッセージが表示されます。他の方法があることは知っていますが、ヌル合体でどのように行うことができるかを知りたいだけです。

良い週末を。

@Richard Ev: もちろんです。Switch、if elseなど。それがどのように処理されるのか興味がありました

@Jon Skeet: あなたのコメントを読んだ後、それは私を襲った、これはただ悪いです! 基本的に 2 つのファイル拡張子に興味があります。たとえば、ファイルが「abc」で終わる場合は方法 1 に送信し、ファイルが「xyz」で終わる場合は方法 2 に送信します。終わり。

Brian と GenericTypeTea の思慮深い意見にも感謝します

私はそれを閉鎖したと言って満足しています。

4

4 に答える 4

8

null合体ではなく、通常の三項演算子を使用したいようです。何かのようなもの:

(s.EndsWith("d") ? Method1(s) : Method2(s)) ?? "Unknown file type";

これは次と同等です。

string result;
if (s.EndsWith("d"))
  result = Method1(s);
else
  result = Method2(s);
if (result == null)
  result = "Unknown file type";
return result;
于 2010-09-24T15:06:45.577 に答える
3

条件付き (三項) 演算子と null 合体演算子の組み合わせが必要だと思います。

foreach (String s in strList)
{
    string result = (s.EndsWith("d") ? Method1(s) : Method2(s)) 
        ?? "Unknown file type";
}

簡単な英語では、これは次のことを行います。

If s ends with d, then it will try Method1.
If s does not end with d then it will try Method2.
Then if the outcome is null, it will use "Unknown file type"
If the outcome is not null, it will use the result of either A or B
于 2010-09-24T15:07:11.207 に答える
1

コンパイラが適切な答えを出したと思いますが、できません。

Null 合体は基本的に次の if ステートメントです。

if(x == null)
  DoY();
else
  DoZ();

ブール値を null にすることはできないため、そのように結合することはできません。||他のメソッドが何を返すかはわかりませんが、ここでは単純な演算子が必要なようです。

于 2010-09-24T15:06:08.803 に答える
0

最初にnull合体演算子を使用してnull参照??を防ぐ必要があります。s次に、?三項演算子を使用してとの間Method1で選択しますMethod2。最後に、??null合体演算子を再度使用してデフォルト値を指定します。

foreach (string s in strList)
{
    string computed = s;
    computed = computed ?? String.Empty;
    computed = computed.EndsWith("d") ? Method1(s) : Method2(s);
    computed = computed ?? "Unknown file type";
}
于 2010-09-24T15:35:43.610 に答える