Переместите 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'.

Вопрос

Я могу думать о двух результатах, из которых любой одобрен мной:

  1. Переместить оба Foo а также Too<T> в Foo.cs
  2. Переехать Foo в Foo.cs и двигаться Foo<T> в FooOfT.cs

Итак, вопрос остается:

  1. Есть ли другая лучшая практика именования, которая не конфликтует с resharper?
  2. Есть ли способ настроить 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> и положить их в разные папки.
Другие вопросы по тегам