C# &引用;不要在成员签名中嵌套泛型类型“;对于可为空的十进制数

C# &引用;不要在成员签名中嵌套泛型类型“;对于可为空的十进制数,c#,generics,code-analysis,C#,Generics,Code Analysis,我有以下接口 public interface IMyInterface { DataItem<decimal?> MyProperty { get; } } 当我运行代码分析时,我得到了警告 CA1006不在成员签名中嵌套泛型类型 “IMyInterface.MyProperty”不嵌套泛型类型的设计 “数据项” 有人告诉我 不要抑制来自此规则的警告 我一般倾向于遵循这些准则。那么,我将如何重构我的接口(或DataItemclass)以遵循这些准则呢?或者这更像是重新设计

我有以下接口

public interface IMyInterface
{
    DataItem<decimal?> MyProperty { get; }
}
当我运行代码分析时,我得到了警告

CA1006不在成员签名中嵌套泛型类型 “IMyInterface.MyProperty”不嵌套泛型类型的设计 “数据项”

有人告诉我

不要抑制来自此规则的警告


我一般倾向于遵循这些准则。那么,我将如何重构我的接口(或
DataItem
class)以遵循这些准则呢?或者这更像是重新设计而不是重构?

在这种情况下,我个人会抑制它<代码>数据项并没有那么复杂。这条规则实际上是为了捕捉类似于
字典
的内容。当嵌套与您的情况一样只有一个层次时,我已经抑制了它。请记住,代码分析关注的是程序集中的IL,而不是源代码。小数点?是c#可空的缩写。所以代码分析看到的是数据项。这种筑巢是它所抱怨的。我倾向于简单地抑制这种情况,因为这是一种代码分析不够聪明的情况,无法理解这不是您在源代码中看到的。我需要做什么来遵守这些指导原则?可以创建一个
NullableDataItem
类,该类将
T
约束为一个结构,并具有一个
公共T?值{get;set;}
属性?或者有更好的方法吗?“有更好的方法吗?”-尝试搜索错误代码本身。有很多案例都有解决方案:,…就我个人而言,在这种情况下我会抑制<代码>数据项并没有那么复杂。这条规则实际上是为了捕捉类似于
字典
的内容。当嵌套与您的情况一样只有一个层次时,我已经抑制了它。请记住,代码分析关注的是程序集中的IL,而不是源代码。小数点?是c#可空的缩写。所以代码分析看到的是数据项。这种筑巢是它所抱怨的。我倾向于简单地抑制这种情况,因为这是一种代码分析不够聪明的情况,无法理解这不是您在源代码中看到的。我需要做什么来遵守这些指导原则?可以创建一个
NullableDataItem
类,该类将
T
约束为一个结构,并具有一个
公共T?值{get;set;}
属性?或者有更好的方法吗?“有更好的方法吗?”-尝试搜索错误代码本身。有很多解决方案的案例:。。。
public class DataItem<T>
{
    private readonly string _name;

    public DataItem(string name)
    {
        this._name = name;
    }

    public string Name
    {
        get
        {
            return _name;
        }
    }

    public T Value { get; set; }
}