Это не то, что может быть применено непосредственно на уровне подписи; чтобы Add(eSomeEnum.Value2, s2);
было законным, подпись Add(eSomeEnum, string)
должна быть действительной, что означает, что Add(eSomeEnum.Value3, s2);
должен быть действительным.
Вы могли бы иметь возможность написать анализатор Rosyln, который обнаруживает это pattern и помечает его как предупреждение, но это довольно продвинутый topi c. Он также не сможет охватить весь сценарий ios, например, где используемое перечисление не является литералом, а является результатом выражения. Возможно, вам просто придется зависеть от проверки / исключений во время выполнения.
В качестве альтернативы рассмотрите возможность использования таких методов, как:
public void Add(int value) => Add(eSomeEnum.Value1, value);
public void Add(string value) => Add(eSomeEnum.Value2, value);
public void Add(MyClass value) => Add(eSomeEnum.Value3, value);
// (and your existing Add method, now 'private')
Теперь вызывающая сторона не может ошибиться, Это может быть расширено, если для каждого типа допустимо несколько перечислений:
public void AddFoo(string value) => Add(eSomeEnum.Value2, value);
public void AddBar(string value) => Add(eSomeEnum.Value3, value);