我知道,我知道… Eric Lippert对这类问题的回答通常是“ 因为不值得花费devise,实施,testing和logging它 ”。 但是,我仍然想要一个更好的解释…我正在阅读关于新的C#4function的博客文章 ,以及有关COM Interop的部分,以下部分引起了我的注意: 顺便说一下,这段代码使用了一个新的特性:索引属性(仔细看看Range后面的方括号)。 但是这个特性只适用于COM interop; 您不能在C#4.0中创build自己的索引属性 。 好的,但是为什么? 我已经知道并且后悔不可能在C#中创build索引属性,但是这句话让我再次想到它。 我可以看到几个很好的理由来实现它: CLR支持它(例如, PropertyInfo.GetValue有一个index参数),所以很遗憾我们不能在C#中利用它。 它支持COM interop,如文章中所示(使用dynamic分派) 它是在VB.NET中实现的 已经有可能创build索引器,也就是将索引应用到对象本身,所以把想法扩展到属性,保持相同的语法并用属性名称replace它可能没什么大不了的 这将允许写这样的事情: public class Foo { private string[] _values = new string[3]; public string Values[int index] { get { return _values[index]; } set { _values[index] = value; } } } 目前我唯一的解决方法是创build一个实现索引器的内部类( ValuesCollection ),并更改Values属性,以便返回该内部类的实例。 这很容易做,但烦人…所以也许编译器可以为我们做! […]