Joh*_*mez 5 c# reflection lambda delegates properties
不确定这是否可行,但这是我想要做的:
我想要一个字典,其中包含列索引到用于填充该索引的属性名称的映射.
在我的代码中,我将循环遍历一个数组,如果字符串并使用字典来查找它应该映射到哪一列.
我的最终结果代码如下所示:
for(int index = 0; index < fields.Length)
{
fieldPropertyMapping[index] = StripQuotes(fields[index]);
}
Run Code Online (Sandbox Code Playgroud)
要做你特别要求的事情,你必须使用反射(当你标记你的问题时)来做这件事.看看PropertyInfo课程.我不完全确定你的代码在做什么,但反映设置属性值的一般例子是:
object targetInstance = ...; // your target instance
PropertyInfo prop = targetInstance.GetType().GetProperty(propertyName);
prop.SetValue(targetInstance, null, newValue);
Run Code Online (Sandbox Code Playgroud)
但是,Action<T>如果您在代码中的某个位置知道属性,则可以通过.例如:
YourType targetInstance = ...;
Action<PropertyType> prop = value => targetInstance.PropertyName = value;
... // in your consuming code
prop(newValue);
Run Code Online (Sandbox Code Playgroud)
或者,如果您在调用它时知道了类型,但是没有实例,则可以将其设置为Action<YourType, PropertyType>.这也会阻止创建一个闭包.
Action<YourType, PropertyType> prop = (instance, value) => instance.PropertyName = value;
... // in your consuming code
prop(instance, newValue);
Run Code Online (Sandbox Code Playgroud)
为了使这个完全通用("泛型",如"非特定",而不是泛型),你可能必须使它成为一个Action<object>并将其转换为lambda中的适当属性类型,但这应该适用于任何一种方式.