Я бы рассмотрел создание универсального интерфейса:
public interface IPredefinedInterface<T>
{
void DoSomething(T obj)
}
Затем реализовать так:
public clas MyClass<T> : IPredefinedInterface<T>
{
public void DoSomething(T obj)
{
// It's now always T, eliminating the need for an exception
}
}
Если вы не можете использовать этот шаблон (потому что хотите иметь возможность передавать любой тип), то я бы предложил перейти с контекстно-зависимым исключением для этого класса:
public class InvalidMyClassInputException : ApplicationException
{
public InvalidMyClassInputException(object obj)
: base("An invalid call to DoSomething was made with object of type: " + obj.GetType().Name)
{
}
}