Другой ответ не будет работать при использовании .id, потому что ваш тип T не ограничен. Класс не имеет ни малейшего представления о том, что любая T может реализовать поле/свойство ID
Представьте, что вы использовали вместо
foo <int>()
T будет ИНТ и ИНТ не имеет идентификатор поля/свойства
Вы можете ограничить хотя бы
foo <T>()
where T : ClassTypeThatImplementsId
{
int x = ((T)SomeClass).Value;
}
Хотя это означает, что T может быть только определенного типа. Есть ли базовый класс с идентификатором, который вы можете использовать вместо этого? Я не знаю, является ли это решение, которое вы хотите, хотя ...
Edit:
В ответ на Ваше сообщение:
foo <T>()
where T : BaseClass
{
int x = ((T)SomeClass).Value;
}
Должно работать при условии, «Value» BaseClass Реализует (и предполагая, SomeClass приходит откуда-то, как там кажется, нет никакой ссылки на него в методе)
Какая задача вы пытаетесь решить? Вы можете использовать интерфейсы, дженерики или другие средства. Но решение зависит от того, чего вы пытаетесь достичь в этой ситуации. – Trogvar
Я пытаюсь получить sth следующим образом: int id = ((cl) SomeClass) .id.Value; – Sayid
Не могли бы вы подробнее рассказать? Я не думаю, что вы можете применить класс (в вашем примере SomeClass) к другому классу. Вы можете передать объект другому классу. Но вы должны знать, что это тип, который может быть перенесен на другой тип (или вы получите InvalidCastException). Вы могли бы использовать generics и ограничение для параметра type, но тогда вам не пришлось бы бросать его. Поэтому я озадачен тем, чего вы пытаетесь достичь, и в чем проблема, которую вы пытаетесь решить. – Peter