15

誤検知と思われるコード分析警告が表示されます。

CA1812 : Microsoft.Performance : 'MyClass.MyPrivateClass' は、明らかにインスタンス化されていない内部クラスです。その場合は、アセンブリからコードを削除します。このクラスに静的メソッドのみを含めることを意図している場合は、プライベート コンストラクターを追加して、コンパイラが既定のコンストラクターを生成しないようにすることを検討してください。

この警告を取り除くにはどうすればよいですか? 他の方法で回避できないと確信していない限り、警告を抑制しないことを好みます。

クラスは次のようになります。

namespace Some.Namespace
{
    public class MyClass
    {
        private class MyPrivateClass
        {
            public int Id { get; set; }
            public ModelObject { get; set; }
        }
    }
}

私はこのように使用します:

private IQueryable<MyPrivateClass> GetMyPrivateClasses()
{
    return this.Repository().All()
        .Select(m => new MyPrivateClass { Id = m.Id, ModelObject = m };
}

この使用はインスタンス化としてカウントされませんか?

4

2 に答える 2

21

ILを調べていると思います。そして本当に - その IL には命令が含まれていませんnew MyPrivateClass- そのステートメントはおそらく実行されているIQueryable<T>ため、そのラムダは式ツリーです。それにはいくつかExpression.Newの が含まれますが、含まれてtypeof(MyPrivateClass)いませんnew MyPrivateClass

この場合、エラーは誤解を招きます。単純に抑えてください。

于 2013-08-14T08:37:50.490 に答える