Tag: 语言设计

为什么C#不允许通用属性?

我想知道为什么我不能像通用方法那样在非generics类中拥有generics属性。 即: public interface TestClass { IEnumerable GetAllBy(); //this works IEnumerable All { get; } //this does not work } 我读了@Jon Skeet的答案 ,但这只是一个声明,很可能是规范中的某个地方。 我的问题是为什么它实际上是这样的? 这种限制是否避免了一些问题?

Foreach可以抛出InvalidCastException吗?

想象一下以下代码: class foreach_convert { public static void method2() { List x = new List(); x.Add(5); foreach (string s in x) { //InvalidCastException in runtime } } } 我想知道,为什么这种foreach行为如此……不是C#式的? 这里发生的是对子类的隐式强制转换,它容易出错并且似乎在语言中的其他任何地方都被禁止。 或者我不对吗? PS我之所以问的原因是我的项目中的类似代码中有一个错误,我曾经在外部库中迭代一个自定义Collection,它被称为SomeTypeCollection ,但实际上提供了一个基类型的集合items和可能包含SomeOtherType项目。 我的错,但仍然没有语言,也没有编译器提供任何明确的提示/警告,这对C#来说很不寻常……

为什么值类型存储在Stacks上?

为什么C#(。Net)更喜欢堆栈来存储值类型? 这种设计背后的主要原因是什么? 是否因为对堆栈的读/写操作更好地利用了机器处理器? 此外,也许你可以certificate为什么不是其他人?