- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用反射在运行时设置 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/
考虑以下类型: (int, int) → 管理。 struct MyStruct { public (int,int) Value; } → 不受管理! 问题: 非泛型结构 MyStruct ,它有一
我如何检查 ValueTuple 列表的类型是否为 List , 不考虑参数的类型。 可能是: new List() new List() new List() 我尝试过的 public stati
B"H 我正在尝试使用 C# 7 的新元组功能,但遇到了一些问题。实际上,它们工作正常,我不确定是什么改变导致它们损坏。 我正在使用 ASP.Net 4、MVC 5,目标是 .net framewor
命名 ValueTuple 元素时,是否应该大写? (string Name, int Index) rec; 或 (string name, int index) rec; 编辑: 似乎约定是 Pa
我正在尝试使用反射在运行时设置 ValueTuple 的字段,但遇到了问题。我怀疑我不了解 FieldInfo.SetValue 的工作原理。 var a = (5, 5); a.Item1 = 6;
是否可以编写一个 C# 方法来接受具有任意数量的相同类型的值元组并将它们转换为列表? 编辑 2/6/2019我接受了提供的答案作为正确答案。我还想提供一个使用不是接口(interface)的基类的解决
我将返回大型 List 对象作为我的 ValueTuple 中的参数之一。像这样的东西: (bool success, List data string error)> Get(string temp
我有一个用例,我需要检查某个值是否为 C# 7 ValueTuple,如果是,则循环遍历每个项目。我尝试检查 obj is ValueTuple 和 obj is (object, object) 但
我尝试使用 ValueTuple 结构并尝试实现一个不可变的复合键。键由值类型组成。 我试图通过一些单元测试来破坏以下实现,但到目前为止没有成功。我错过了什么吗? 此外,这只是出于好奇,我想了解 Va
当我检查我的缓存以查看我的 ValueTuple 是否在缓存中时,我使用下面的代码。在这种情况下,返回的值为空(也就是缓存中不存在)。当代码运行时,我在第一行收到 object not set to
我在 C# 中尝试 ValueTuple 类,我对属性命名有疑问,让我们看看: 如果实例化一个 ValueTuple 声明这样的对象:var tuple1 = (Name: "Name1", Age:
假设我有一个方法 foo,它返回一个 ValueTuple,其中一个成员是一次性的,例如 (IDisposable, int) . 确保调用方正确处理返回的一次性对象的最佳方法是什么? 我尝试了以下方
我想这可能是一本方便的字典: var myDict = new Dictionary(); 散列会是什么样子? 等效的键类型(结构)是什么样的? 最佳答案 是的,没关系。 ValueTuple fam
有一个方法接收一个ValueTuple,修改后返回。在这种情况下,我可以在方法参数中指定 ValueTuple 的字段名吗? private static void Operation() {
如何像这样创建超过八个值的 ValueTuple 列表: (int Id, string FirstName, string LastName, int Vek, int City, int Zip,
这可以在 C# 7.3(框架 4.8)中正确编译: (string, string) s = ("a", "b"); (object, string) o = s; 我知道这是以下内容的语法糖,它也可
这个问题已经有答案了: Why can't class fields be var? [duplicate] (4 个回答) 已关闭 4 年前。 我想初始化 ValueTuples 的静态只读数组,我
我刚刚将一个 DLL 文件包含到我的项目中,并且正在使用一种返回 List 的方法。 .我最近才意识到 ValueTuple C# 7 中的数据类型,并希望使用它而不是返回的普通元组。我知道我可以循环
这个问题已经有答案了: Why can't class fields be var? [duplicate] (4 个回答) 已关闭 4 年前。 我想初始化 ValueTuples 的静态只读数组,我
我刚刚将一个 DLL 文件包含到我的项目中,并且正在使用一种返回 List 的方法。 .我最近才意识到 ValueTuple C# 7 中的数据类型,并希望使用它而不是返回的普通元组。我知道我可以循环
我是一名优秀的程序员,十分优秀!