将属性传递给方法以更改该属性

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)

Ada*_*son 6

要做你特别要求的事情,你必须使用反射(当你标记你的问题时)来做这件事.看看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中的适当属性类型,但这应该适用于任何一种方式.