TypedReference的实际用途

SLa*_*aks 26 .net c# typedreference

TypedReference在实际代码中实际使用的结构是否有任何实际用途?

编辑:.Net框架在重载中使用它们,Console.WriteLineString.Concat__arglist参数构建数组并将其传递给正常的params重载.为什么存在这些过载?

Eri*_*ert 19

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

是.如果我需要与C风格的可变方法的互操作性,我会使用它们.

为什么存在这些过载?

它们存在于与喜欢使用C风格可变方法的调用者的互操作性.


Abe*_*bel 13

这似乎是一个非常古老的问题,但我想再添加一个用例:当你有一个结构并希望通过反射设置它的变量时,你总是会对盒装值进行操作而不会改变原始值.这没用:

TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = typeof(TestFields).GetField("MaxValue");
info.SetValue(fields, 4096);

// result: fields.MaxValue is still 1234!!
Run Code Online (Sandbox Code Playgroud)

这可以通过隐含的拳击来解决,但是你可以放松类型安全.相反,您可以使用以下方法解决此问题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!!
Run Code Online (Sandbox Code Playgroud)