6

私はいくつかの冗長なコードを持っていました:

private bool AnyUnselectedCombox()
{
    bool anyUnselected = false;
    foreach (Control c in this.Controls)
    {
        if (c is ComboBox)
        {
            if ((c as ComboBox).SelectedIndex == -1)
            {
                anyUnselected = true;
                break;
            }
        } 
    }
    return anyUnselected;
}

...Resharper は、次のような LINQ 式でエレガント化することを提案しました。

return this.Controls.OfType<ComboBox>().Any(c => (c as ComboBox).SelectedIndex == -1);

...しかし、その後のResharperインスペクションは、生成されたコード(上記)について次のように述べています: 「型キャストは冗長です」 (「C as ComboBox」部分を参照)。

return this.Controls.OfType<ComboBox>().Any(c => c.SelectedIndex == -1);

Resharper は、Resharper 承認済みのコードを生成すべきではありませんか? それとも、完全に「腰を締める」ために2回のパスが必要な場合がありますか?

4

1 に答える 1

9

はい、時々 ReSharper はそれ自体を修正し、それを「ちょうどいい」ものにするために 2 回目のパスが必要になります。私は常に、特定の「安全なテンプレート」を使用して変換を行うと想定しており、場合によっては、安全な変換の一部が実際には必要ない場合もあります。

コードのすべてのバージョンは正しく同等ですが、最初の「パス」は Linq に変換され、2 番目の「パス」は Linq 変換によって追加された冗長なコードを削除します。

于 2012-09-26T20:30:32.303 に答える