TypedReference的实际用途

您是否真的在实际代码中使用TypedReference结构的实际用途?

编辑 :.Net框架在Console.WriteLineString.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!!