Lik*_*ode 4 c# refactoring ref
这就是我的意思:
我需要能够替换这个丑陋的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;
Run Code Online (Sandbox Code Playgroud)
进入这样的事情:
machinePool.ConvertStringToObjectField(attribute.Name) = attribute.Value;
Run Code Online (Sandbox Code Playgroud)
没有ConvertStringToObjectField()方法,但我希望有这样的东西,如果可能的话.我可以访问machinePool对象类代码,所以我可以添加必要的代码,但我不确定它可能是什么代码,或者甚至可以在C#中进行.
是的,你可以通过反思来做到这一点:
var fieldInfo = machinePool.GetType().GetField(attribute.Name);
fieldInfo.SetValue(machinePool, attribute.Value);
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个扩展方法,以简化操作:
public static void SetField(this object o, string fieldName, object value)
{
var fi = o.GetType().GetField(fieldName);
fi.SetValue(o, value);
}
Run Code Online (Sandbox Code Playgroud)