使用 ReSharper 将 Foo 和 Foo<T> 移动到匹配文件
Posted
技术标签:
【中文标题】使用 ReSharper 将 Foo 和 Foo<T> 移动到匹配文件【英文标题】:Move Foo and Foo<T> with ReSharper to matching files 【发布时间】:2013-09-10 17:03:46 【问题描述】:代码
我想使用 ReSharper 将类型移动到匹配文件中 功能来移动下面写在单个 .cs
' 中的代码。文件:
public abstract class Foo
public abstract class Foo<T> : Foo
执行 ReSharper 重构会导致此异常:
不能移动类 Foo 因为有另一个声明 将被移动到文件“Foo.cs”中。
问题
我能想到两种结果,其中一种我都可以接受:
-
将
Foo
和Too<T>
都移动到Foo.cs
将Foo
移动到Foo.cs
并将Foo<T>
移动到FooOfT.cs
所以,问题仍然存在:
-
是否有其他与 resharper 不冲突的最佳命名实践?或
有没有办法配置 ReSharper 以支持这种命名?
注意
因为泛型对于每种可能的约束组合都是唯一的,所以Foo
类是我的接口类。因此我不会将Foo<T>
重命名为Bar<T>
。
我不希望将 Foo
重命名为 FooBase
,因为它已经是一个抽象类,这使得显式“Base”后缀变得多余。
我无法将Foo
重构为IFoo
,因为Foo
是我的概念接口(因为需要基本实现。
【问题讨论】:
我有时将泛型文件命名为 Foo`1.cs 来表示 Foo 上的一个泛型类型参数。但这不是使用 ReSharper。 “在微软,他们使用ClassNameOfT.cs
。” ***.com/a/804114/781792
@TimS。这正是我的第二个建议。但是,不幸的是,ReSharper 似乎不支持这种命名约定。
@MauriceStam 直到你有像你自己的 Tuple
这样的东西,它有多个类型参数,但在不同的文件中大声笑
@JesseC.Slicer 谢谢你的建议。不幸的是,这不是解决方案,因为我希望文件夹结构遵循命名空间结构。
【参考方案1】:
据我所知,没有办法告诉 Resharper 附加文件名的通用参数。它只会使用类名,即Foo
、Foo<T>
和Foo<A, B, C>
都有Foo.cs
作为文件名,但是 - 这就是问题所在 - ReSharper 似乎不知道这种可能性存在并且会显示在这种情况下你是一个错误。除了logging a bug or feature request,你真的无能为力。
【讨论】:
【参考方案2】:您可以考虑以下选项:
使用AbstractFoo
如果可能,将 Foo 更改为接口,并使用 IFoo
使用GenericFoo
为Foo
和Foo<T>
使用不同的命名空间,并将它们放在不同的文件夹中。
【讨论】:
不幸的是Foo
已经是我的“概念”接口类。但是我需要一些基本的实现,因此我使用抽象类而不是 c# 接口。
您还可以开发一个 Resharper 插件来满足您的需求。以上是关于使用 ReSharper 将 Foo 和 Foo<T> 移动到匹配文件的主要内容,如果未能解决你的问题,请参考以下文章
为啥 `obj.foo = function() ;` 没有将名称 `foo` 分配给函数?
使用 Microchip XC16 编译器将 foo.cpp 构建为 C 代码