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; }
}