我想知道为什么我不能像使用通用方法那样在非通用类中拥有通用属性。 IE。:
public interface TestClass
{
IEnumerable<T> GetAllBy<T>(); //this works
IEnumerable<T> All<T> { get; } //this does not work
}
我读了@Jon Skeet的answer,但这只是一个声明,很可能在规范中。
我的问题是为什么实际上是这种方式?通过这种限制是否可以避免出现某种问题?
最佳答案
从技术上讲,CLR仅支持通用类型和方法,而不支持属性,因此问题是为什么未将其添加到CLR。答案可能仅仅是“它没有带来足够的利益而值得付出这些代价”。
但从根本上讲,它被认为没有任何好处,因为在语义上用类型参数化属性是没有意义的。 Car
类可能具有Weight
属性,但是拥有Weight<Fruit>
和Weight<Giraffe>
属性没有任何意义。
关于c# - 为什么C#不允许通用属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8620883/