MgS*_*Sam 2 .net c# tuples valuetuple
我正在尝试使用反射在运行时设置ValueTuple的字段,并且遇到了问题。我怀疑我对FieldInfo.SetValue工作原理不了解。
var a = (5, 5);
a.Item1 = 6;
Console.WriteLine(a.Item1); // 6
var t = a.GetType();
var f = t.GetField("Item1");
f.SetValue(a, 10);
Console.WriteLine(a.Item1); // 6 - Why not 10?
Run Code Online (Sandbox Code Playgroud)
有见识吗?
问题在于,当您将元组传递给时,您需要将其装箱SetValue,因此它正在设置副本。如果通过object变量将其装箱,将其传入,然后取消装箱,您将看到更改。这是一个完整的示例,上面的代码经过改编:
using System;
class Test
{
static void Main()
{
var a = (5, 5);
a.Item1 = 6;
Console.WriteLine(a.Item1); // 6
var t = a.GetType();
var f = t.GetField("Item1");
object obj = a;
f.SetValue(obj, 10);
a = ((int, int)) obj;
Console.WriteLine(a.Item1); // 10
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |