我有一个要迭代的列表。List 内部是Argument类,其中包含两个属性'PropertyName'和'Value'我需要做的是遍历参数的集合,并将该参数的值分配给不同类的属性(与当前参数同名)。例:Argument: PropertyName: ClientID Value: 1234Members Class: ClientID = {Argument Value here}我希望这是有道理的。我有一种方法,可以对类的属性进行硬编码,并将其与Argument列表匹配。就像是:foreach(var arg in List<Argument>){ Members.ClientID = arg.Find(x => compareName(x, "ClientID")).Value; //where compareName just does a simple string.Compare}但是对于这样的东西,最好的方式是什么?编辑:对不起,这些家伙,并感谢到目前为止的答复。这是我未提及的内容,可能会有所作为。每个参数是同一类的不同属性。我正在遍历列表,每个列表中我必须填充相同的成员类。我想提到这一点,因为我想在foreach中可能必须使用开关来确定该参数的“ PropertyName”。 ClientID是其中之一,但我认为需要从Collection中填充的Members类中共有14个属性。这会改变一切吗?再次感谢 最佳答案 我认为您的基本意图是根据属性名称在目标对象上设置属性的值。由于您没有提供Argument类,因此我将假定它的定义如下:public class Argument{ public string PropertyName{get; set;} public object PropertyValue{get;set;}}进一步假定您具有如下定义的Blah类:public class Blah{ public string AString{get; set;} public int AnInt{get; set;} public DirectoryInfo ADirInfo{get; set;}}如果希望基于Blah中的值分配给List<Argument>对象的属性,则可以这样进行:List<Argument> arguments = new List<Argument>{ new Argument(){PropertyName = "AString", PropertyValue = "this is a string"}, new Argument(){PropertyName = "AnInt", PropertyValue = 1729}, new Argument(){PropertyName = "ADirInfo", PropertyValue = new DirectoryInfo(@"c:\logs")}};Blah b = new Blah();Type blahType = b.GetType();foreach(Argument arg in arguments){ PropertyInfo prop = blahType.GetProperty(arg.PropertyName); // If prop == null then GetProperty() couldn't find a property by that name. Either it doesn't exist, it's not public, or it's defined on a parent class if(prop != null) { prop.SetValue(b, arg.PropertyValue); }}这取决于存储在Argument.PropertyValue中的对象,该对象具有与Argument.PropertyName引用的Blah属性相同的类型(或必须有隐式类型转换)。例如,如果您按以下方式更改List<Argument>:List<Argument> arguments = new List<Argument>{ new Argument(){PropertyName = "AString", PropertyValue = "this is a string"}, new Argument(){PropertyName = "AnInt", PropertyValue = 1729}, new Argument(){PropertyName = "ADirInfo", PropertyValue = "foo"}};现在,当您尝试分配给Blah.ADirInfo:Object of type 'System.String' cannot be converted to type 'System.IO.DirectoryInfo'时,您将获得一个异常。关于c# - 根据属性名称动态分配属性值的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20434579/
10-11 05:18