1

これは resharper の誤検知だと思いますが、他の方のご意見を頂きたいです。多分私は何かが欠けています。

この動作は、Resharper 9.2 と 10 の両方で見つかりました。

このクラスを検討してください:

   public class Foo
   {
      public IEnumerable<string> SomeList { get; set; }
   }

そして、この方法:

  public void Method(Foo thisFooCanBeNull)
  {
     List<string> theList = thisFooCanBeNull?.SomeList?.ToList();
     if (theList != null && theList.Count > 0) //Possible multiple enumeration of IEnumerable
     {
        foreach (string s in theList) //Possible multiple enumeration of IEnumerable
        {
           //Do something with list.
        }
     }
  }

theList.Countforeachワーニングをトリガーしますが、私がしたのでToList()、これは不可能ですよね?

thisFooCanBeNull?.SomeList?.ToList()で変更しても警告は発生しませんthisFooCanBeNull.SomeList?.ToList()が、「この foo は null になる可能性がある」ため、変更したくありません。

このコードに問題がある人はいますか?

4

1 に答える 1

2

これが複数回列挙されるケースは見当たりません。まだ新しい ? に関連する R# のバグだと思いがちです。特に通常のドット演算子と交換するとエラーが解消されるためです。

ただし、IEnumerable のソースが何であれ、ブレークポイントまたはデバッグ ステートメントを配置して、実際に複数回列挙されないことを再確認することをお勧めします。

于 2015-11-10T16:34:29.123 に答える