场合
我试图为我的WPF应用程序创建一个编辑成员方法。
基本上,我在我的主类中有一个成员列表,我遍历该成员列表并找到具有匹配的Username参数的成员,这是有效的。
然后,一旦在系统中找到了该用户名(因为该成员需要使用有效的用户登录),我想设置该成员。" Whatever"用户选择在gui上编辑的任何参数的参数,以及用户为该参数输入的新内容。
public void editMember(string Username, string parameter, string newEntry)
{
foreach (BaseMember bm in members)
{
if (Username == bm.username)
{
bm.[parameter] = newEntry;
}
}
问题
我不想这样做:
" member.club"和" member.firstname",或者" member.street",因为用户可以编辑的参数太多,并且它已经啰嗦&#34坏的#34;代码。
如何在一行代码中执行此操作?因为bm.[parameter] = newEntry;
无法工作?
更多信息
如果我使用静态参数,例如bm.memclub = newEntry;
,但我希望参数是动态的,则此方法有效。
答案 0 :(得分:1)
您需要使用Reflection:
foreach (BaseMember bm in members)
{
if (Username == bm.username)
{
Type type = bm.GetType();
PropertyInfo prop = type.GetProperty(parameter);
prop.SetValue (bm, newValue, null);
}
}
Reflection提供描述当前对象的对象(类型为Type)。您可以使用反射来动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。