Ответ 1
Это кажется немного странным требованием для начала, если честно - если что-то должно работать для любой последовательности символов, тогда оно должно работать для строки, которая представляет собой последовательность символов.
Если вы действительно хотите, чтобы это не удалось скомпилировать, вы могли бы добавить прием перегрузки string
, который помечен как устаревший:
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete(IsError = true, Message = "A string is a sequence of characters, but is not intended to be shown as a list")]
public static void ShowList(this string text)
{
throw new NotSupportedException();
}
Разрешение перегрузки выберет этот метод, а затем он не сможет скомпилироваться. Атрибут EditorBrowsable
, надеюсь, удалит это из Intellisense, но вам нужно будет увидеть, действительно ли это работает. (Это может показать еще одну перегрузку, даже если это не будет выбрано.)
Другим вариантом было бы реализовать ShowList<T>
, как если бы строка была списком с одним входом:
// Specialization to avoid listing each character separately.
public static void ShowList(this string text) => new[] { text }.ShowList();
Другими словами, сделайте его действительным для вызова, но обработайте его более соответствующим образом.