使用 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”中。

问题

我能想到两种结果,其中一种我都可以接受:

    FooToo&lt;T&gt; 都移动到Foo.csFoo 移动到Foo.cs 并将Foo&lt;T&gt; 移动到FooOfT.cs

所以,问题仍然存在:

    是否有其他与 resharper 不冲突的最佳命名实践?或 有没有办法配置 ReSharper 以支持这种命名?

注意

因为泛型对于每种可能的约束组合都是唯一的,所以Foo 类是我的接口类。因此我不会将Foo&lt;T&gt; 重命名为Bar&lt;T&gt;。 我不希望将 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 附加文​​件名的通用参数。它只会使用类名,即FooFoo&lt;T&gt;Foo&lt;A, B, C&gt; 都有Foo.cs 作为文件名,但是 - 这就是问题所在 - ReSharper 似乎不知道这种可能性存在并且会显示在这种情况下你是一个错误。除了logging a bug or feature request,你真的无能为力。

【讨论】:

【参考方案2】:

您可以考虑以下选项:

使用AbstractFoo 如果可能,将 Foo 更改为接口,并使用 IFoo 使用GenericFooFooFoo&lt;T&gt; 使用不同的命名空间,并将它们放在不同的文件夹中。

【讨论】:

不幸的是 Foo 已经是我的“概念”接口类。但是我需要一些基本的实现,因此我使用抽象类而不是 c# 接口。 您还可以开发一个 Resharper 插件来满足您的需求。

以上是关于使用 ReSharper 将 Foo 和 Foo<T> 移动到匹配文件的主要内容,如果未能解决你的问题,请参考以下文章

告诉 Resharper 一个 lambda 参数不为空

如何防止 Resharper 大量缩进 lambda?

为啥 `obj.foo = function() ;` 没有将名称 `foo` 分配给函数?

使用 Microchip XC16 编译器将 foo.cpp 构建为 C 代码

何时使用“import * as Foo”与“import Foo”? [复制]

函数 foo 和 bar 的执行顺序是啥?