TypedReference的实际用途
您是否真的在实际代码中使用TypedReference
结构的实际用途?
编辑 :.Net框架在Console.WriteLine
和String.Concat
重载中使用它们,它们从__arglist
参数构建一个数组并将其传递给正常的params
重载。 为什么存在这些重载?
您是否真的在实际代码中使用TypedReference结构的实际用途?
是。 如果我需要与C风格的可变方法的互操作性,我会使用它们。
为什么存在这些重载?
它们存在于与喜欢使用C风格可变方法的调用者的互操作性。
这似乎是一个非常古老的问题,但我想再增加一个用例:当你有一个结构并希望通过reflection设置它的变量时,你总是会对盒装值进行操作而不会改变原始值。 这没用:
TestFields fields = new TestFields { MaxValue = 1234 }; FieldInfo info = typeof(TestFields).GetField("MaxValue"); info.SetValue(fields, 4096); // result: fields.MaxValue is still 1234!!
这可以通过隐含的拳击来解决,但是你可以放松类型安全。 相反,您可以使用TypedParameter
修复此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!!