刚刚注意到这不起作用:
var dict = new Dictionary<int, XElement>();
XContainer element;
//...
if (dict.TryGetValue(idx, out element)) { //...
然后我尝试了这个:
class A { }
class B : A { }
class Program {
static void Main() {
A a;
a = Ret(); // no error, ok
Ref(ref a); // compiler error, ok...
Out(out a); // compiler error, lolwut?!
}
static B Ret() { return null; }
static void Ref(ref B b) { }
static void Out(out B b) { b = null; }
}
为什么在最后一次调用中出现编译器错误?
编辑:好的,所以我从答案中了解到“out”是变相的“ref”,因此它可以由其他函数或线程共享和更改。但实际上,“out”不应该是一种从函数返回多个值的方法吗?因为如果是这样,它似乎并不擅长。如果分享会产生问题,那就不要分享。只需在函数开头创建一个隐藏变量,然后使用它。我是说:
static void Out(out B b) {
B bHidden; // compiler generated;
// all references to b are replaced with bHidden;
b = bHidden;
}
有什么理由不能这样做吗?现在对我来说似乎很安全......