为C#Contract类创建重新精简命名样式
使用Microsoft的代码契约在接口上编写代码契约时,会创建一个包含所有契约的抽象契约类:为C#Contract类创建重新精简命名样式,c#,resharper,code-contracts,C#,Resharper,Code Contracts,使用Microsoft的代码契约在接口上编写代码契约时,会创建一个包含所有契约的抽象契约类: 使用System.Diagnostics.Contracts; [合同类别(类型(ICollectionContract))] 公共接口ICollection{ //接口方法 } [ContractClassFor(typeof(ICollection))] 抽象类ICollectionContract:ICollection{ //接口合同 } Microsoft约定将合同类命名为与接口相同的名称,
使用System.Diagnostics.Contracts;
[合同类别(类型(ICollectionContract))]
公共接口ICollection{
//接口方法
}
[ContractClassFor(typeof(ICollection))]
抽象类ICollectionContract:ICollection{
//接口合同
}
Microsoft约定将合同类命名为与接口相同的名称,但后缀为contract
,例如ICollectionContract
。
然而,Resharper并不喜欢命名,部分原因是抽象类的前缀是I
有没有一种方法可以创建一种命名样式,告诉Resharper契约类(那些用
ContractClassFor
注释的)必须与接口具有相同的名称,但后缀为contract
?这不是您可以配置Resharper立即执行的操作,您必须创建一个自定义插件
您必须创建一个元素ProblemAnalyzer
,然后检查它是否包含[ContractClass]
属性,然后确保它具有正确的名称。您还可以创建一个快速修复建议来重命名接口
一个好的开始类似于-它有一个很好的实现,可以分析异步方法中缺少的async
后缀,并提供添加后缀的功能。看看这个实现,看看你自己插件的想法