Переместите Foo и Foo<T> с помощью ReSharper в соответствующие файлы
Код
Я хотел бы использовать функциональность ReSharper Move Types Into Matching Files для перемещения приведенного ниже кода, который написан в одном .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
мой концептуальный интерфейс (из-за необходимой базовой реализации.
2 ответа
Насколько я знаю, у Resharper нет способа добавить общие параметры имени файла. Он просто будет использовать имя класса, т.е. Foo
, Foo<T>
а также Foo<A, B, C>
у всех есть Foo.cs
как имя файла, но - и это проблема - ReSharper, кажется, не знает, что такая возможность существует, и покажет вам ошибку в этом сценарии. На самом деле вы ничего не можете с этим поделать, кроме регистрации ошибок или запросов функций.
Вы можете рассмотреть эти варианты:
- использование
AbstractFoo
- Измените Foo на интерфейс, если это возможно, и используйте
IFoo
- использование
GenericFoo
- Используйте разные пространства имен для
Foo
а такжеFoo<T>
и положить их в разные папки.