在C#中获取对字段值的引用[重复]
Posted
技术标签:
【中文标题】在C#中获取对字段值的引用[重复]【英文标题】:Get ref to field value in C# [duplicate] 【发布时间】:2020-06-07 03:18:13 【问题描述】:我需要在 C# 中获取对字段值的引用,但我找不到任何方法来获取对可以作为参数传递的字段的实际引用。任何帮助将不胜感激。
例子:
public class SomeClass
public int value = 0;
public class SomeOtherClass
static void Main(string[] args)
SomeClass x = new SomeClass();
Console.WriteLine(x.value); //Outputs "0"
foreach (FieldInfo field in x.GetType().GetFields())
Log(ref field.value) //Outputs "10"
// ^
//Not a valid member
static void Log(ref int i)
i = 10;
Console.WriteLine(i);
【问题讨论】:
我用过 field.GetValue(null).ToString() 为什么你还需要参考值?您基本上只是将其作为 Log 方法的常量处理。 你在前一天已经问过这个问题了。 Get Reference to Field from Reflection 请不要因为您没有收到旧问题的答案而提出新问题。我认为您需要更好地阐明您的要求——如果可以的话,我实际上可能会为您提供解决方案 @rmed1na 这是我试图实现的类比。我需要能够获得对该字段的活动引用并使用反射将其作为 ref 参数传递。 @BeckamWhite 为什么不将对象作为引用本身传递呢?我的意思是,我仍然看不到任何用途或为什么将其作为参考传递。引用参数的用法是实际更改作为参数传递的对象的内容。如果您需要更改它,请将整个对象作为 ref 传递并在内部更改工作方法。 【参考方案1】:试试下面的
public class SomeClass
public int value = 0;
public class SomeOtherClass
public static void Main(string[] args)
SomeClass x = new SomeClass();
Console.WriteLine(x.value); // Output Line 1
foreach (FieldInfo field in x.GetType().GetFields())
Console.WriteLine(field.GetValue(x)); // Output Line 2
var y = (int)field.GetValue(x);
Log(ref y);
Console.WriteLine(y); // Output Line 4
static void Log(ref int i)
i = 10;
Console.WriteLine(i); // Output Line 3
输出: 0 0 10 10
【讨论】:
这可行,但我需要Log()
方法来更改SomeClass
中的值【参考方案2】:
class Program
public class SomeClass
public int value = 0;
public class SomeOtherClass
static void Main(string[] args)
var x = new SomeClass();
Console.WriteLine(x.value); //Outputs "0"
foreach (FieldInfo field in x.GetType().GetFields())
var value = (int)field.GetValue(x);
Log(ref x);
Console.WriteLine(x.value);
static void Log(ref SomeClass x)
x.value = 10;
【讨论】:
这可行,但我需要Log()
方法来更改对象x
而不是y
中的值
我已经更新了答案。我希望它会是你想要的。以上是关于在C#中获取对字段值的引用[重复]的主要内容,如果未能解决你的问题,请参考以下文章