Я думаю, что не использование автоматического метода получения / установки показывает, почему это невозможно без определения "T" на уровне класса.
Попробуйте написать код, естественным будет сделать следующее:
IEnumerable<T> _all;
IEnumerable<T> All
{
get { return _all; }
}
Поскольку ваше поле использует "T", то "T" должно быть в классе, а CLR знает, что такое "T".
Когда вы используете метод, выможет задержать определение "T", пока вы на самом деле не вызовете метод.Но с полем / свойством «T» нужно объявлять в одном месте на уровне класса.
Как только вы объявляете T для класса, создание свойства становится довольно простым.
public class TestClass<T>
{
IEnumerable<T> All { get; }
}
использование:
var myTestClass = new TestClass<string>();
var stuff = myTestClass.All;
И точно так же, как параметр типа «T» в методе, вы можете подождать, пока вы на самом деле создадите экземпляр класса TestClass, чтобы определить, каким будет «T».