Предположив У меня есть метод:Cast T как имеющий интерфейс?
public void DoStuff<T>() where T : IMyInterface {
...
}
и в других местах в другой метод, который я хочу, чтобы позвонить
public void OtherMethod<T>() where T : class {
...
if (typeof(T) is IMyInterface) // have ascertained that T is IMyInterface
DoStuff<T>();
}
Есть ли какой-то способ, которым я могу бросить T как имеющий свой интерфейс?
DoStuff<(IMyInterface)T>
и другие подобные варианты не будут работать для меня.
Редактировать: спасибо за указание на то, что typeof(T) is IMyInterface
неправильный способ проверить интерфейс и должен вместо быть вызван фактическим экземпляром Т.
Edit2: Я обнаружил, что (IMyInterface).IsAssignableFrom(typeof(T))
работал в проверке для интерфейса.
Не можете ли вы просто назвать это 'DuStuff'? –
MarcinJuraszek
И еще одна мысль: я думаю, что если вам нужен 'typeof (T)' внутри гена ric, возможно, вы не должны использовать дженерики вообще? – MarcinJuraszek
@MarcinJuraszek Я не согласен. Иногда вы можете использовать 'typeof (T)' в общем методе. На самом деле, я бы сказал, что дженерики являются наиболее распространенным использованием оператора 'typeof'. –