对于给定类,使用list的默认属性,您可以通过执行myClass.defProperty(“key”)来访问列表中的实例对象。您也可以通过输入myClass.defProperty!Key来获得相同的结果。
我被告知使用括号和引号对于运行时访问Property的方式更快,但我想了解有什么区别以及每种方法如何工作......
我理解通过用方括号替换括号,C#具有类似的行为。
答案 0 :(得分:5)
在Visual Basic.NET中给出以下代码:
Dim x As New Dictionary(Of String, String)
x.Item("Foo") = "Bar"
您可以使用以下任何一种方式访问字典的“Foo”成员:
Dim a = x!Foo
Dim b = x("Foo")
Dim c = x.Item("Foo")
如果你看看Reflector.NET下的IL,那么你会发现它们都转换为:
Dim a As String = x.Item("Foo")
Dim b As String = x.Item("Foo")
Dim c As String = x.Item("Foo")
所以,它们在IL中都是等价的,当然,它们都以相同的速度执行。
bang运算符只允许您使用符合标准变量命名规则的静态定义键。
使用索引方法,您的密钥几乎可以是任何有效值(在本例中为字符串),您可以使用变量来表示密钥。
为了代码可读性,我建议使用x.Item("Foo")
表示法,因为非常清楚正在发生什么。 x("Foo")
可能与对过程的调用混淆,x!Foo
使Foo
看起来像变量而不是字符串(它确实是这样)。甚至Stack Overflow颜色编码也使Foo
看起来像一个关键字!
此代码的C#等效项为x["Foo"];
。没有等效的!
语法。
因此,最重要的是!
在性能上并没有更好或更差,只是可能使代码维护更加困难,因此应该避免使用。