SLa*_*aks 26 .net c# typedreference
TypedReference在实际代码中实际使用的结构是否有任何实际用途?
编辑:.Net框架在重载中使用它们,Console.WriteLine并String.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)
| 归档时间: |
|
| 查看次数: |
6081 次 |
| 最近记录: |