核心C#库中是否有任何可以为我提供不可变字典的东西?
Java的一些东西:
Collections.unmodifiableMap(myMap);
Run Code Online (Sandbox Code Playgroud)
而且只是为了澄清,我不打算阻止键/值本身被改变,只是字典的结构.如果任何IDictionary的mutator方法被调用(Add, Remove, Clear),我想要快速和大声失败的东西.
我只是遇到了一些非常奇怪的东西:当你在一个值类型上使用Equals()方法时(如果这个方法当然没有被覆盖)你会得到一些非常慢的东西- 使用一对一比较字段反思!如:
public struct MyStruct{
int i;
}
(...)
MyStruct s, t;
s.i = 0;
t.i = 1;
if ( s.Equals( t )) /* s.i will be compared to t.i via reflection here. */
(...)
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么C#编译器不生成比较值类型的简单方法?像(在MyStruct的定义中):
public override bool Equals( Object o ){
if ( this.i == o.i )
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
编译器在编译时知道MyStruct的字段是什么,为什么它要等到运行时才能枚举MyStruct字段?
对我来说很奇怪.
谢谢 :)
补充:对不起,我只是意识到,当然,Equals它不是语言关键字而是运行时方法......编译器完全不知道这种方法.所以在这里使用反射是有意义的.