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>,因此 lambda 是一个表达式树。它将包含一些Expression.New,和一些typeof(MyPrivateClass)- 但没有new MyPrivateClass

在这种情况下,该错误具有误导性。简单地压制它。

于 2013-08-14T08:37:50.490 回答
-1

将您的课程更改为内部或公共,这可以解决问题。无论如何,你可以从外部类中提取你的内部类......

于 2018-02-28T11:57:54.713 回答