gpt4 book ai didi

c# - 是否可以在 C# 中使用运行时生成的字段名访问对象的字段

转载 作者:太空狗 更新时间:2023-10-30 00:28:57 25 4
gpt4 key购买 nike

我的意思是:

我需要能够替换这个丑陋的 C# 代码:

if (attribute.Name == "Name") machinePool.Name = attribute.Value;
else if (attribute.Name == "Capabilities") machinePool.Capabilities = attribute.Value;
else if (attribute.Name == "FillFactor") machinePool.FillFactor = attribute.Value;

像这样:

machinePool.ConvertStringToObjectField(attribute.Name) = attribute.Value;

没有 ConvertStringToObjectField() 方法,但如果可能的话,我希望有这样的方法。我可以访问 machinePool 对象类代码,因此我可以添加必要的代码,但我不确定它可能是什么代码,或者是否可以在 C# 中执行。

最佳答案

是的,你可以通过反射(reflection)做到这一点:

var fieldInfo = machinePool.GetType().GetField(attribute.Name);
fieldInfo.SetValue(machinePool, attribute.Value);

您还可以创建一个扩展方法来简化操作:

public static void SetField(this object o, string fieldName, object value)
{
var fi = o.GetType().GetField(fieldName);
fi.SetValue(o, value);
}

关于c# - 是否可以在 C# 中使用运行时生成的字段名访问对象的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647415/

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