gpt4 book ai didi

c# - ValueTuple 通过反射设置字段

转载 作者:行者123 更新时间:2023-11-30 20:14:49 25 4
gpt4 key购买 nike

我正在尝试使用反射在运行时设置 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?

有什么见解吗?

最佳答案

问题是当您将元组传递给 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
}
}

关于c# - ValueTuple 通过反射设置字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59000557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com