题
是否有的 TypedReference
结构的任何实际用途你会在真正的代码实际上使用?
修改强>:.NET框架使用它们,其中从Console.WriteLine
参数建立一个数组,并把它传递给正常String.Concat
过载__arglist
和params
的过载。这些重载为什么存在?
解决方案
有没有你实际上在真正的代码中使用TypedReference结构的任何实际用途?
是。我会使用他们,如果我需要与C语言风格的可变参数的方法的互操作性。
为什么这些重载存在?
他们存在的互操作性与谁喜欢用C风格的可变参数方法的调用者。
其他提示
这似乎是一个很古老的问题,但我想补充一个用例:当你有一个结构,并要设置通过反射的变量,你总是在装箱值永不改变操作原本的。这是无用的:
TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = typeof(TestFields).GetField("MaxValue");
info.SetValue(fields, 4096);
// result: fields.MaxValue is still 1234!!
此可以与隐含拳击来补救,但你松散类型安全。相反,你可以用TypedParameter
解决这个问题:
TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = fields.GetType().GetField("MaxValue");
TypedReference reference = __makeref(fields);
info.SetValueDirect(reference, 4096);
// result: fields.MaxValue is now indeed 4096!!
不隶属于 StackOverflow