引用C#中的几个字符串之一

时间:2011-03-09 19:28:22

标签: c# string reference

VS2008中的C#,.NET 2.0,Winforms app。

我创建了一个小类,其构造函数引用一个对象(由许多不同类型的数据字段组成)和一个“key”字符串,其中包含引用对象中一个字符串成员的名称那是要更新的。

在这个小类中,我有一个switch()语句,它检查“key”字符串的每个可能的合法值(它可能真的是枚举类型,但无论如何)和就在那里我正在尝试分配一个单独的内部字符串变量来指向引用对象中的相应字符串变量。稍后,其他代码更新这个单独的内部变量,我需要更新引用对象中的相应变量以匹配。

在C中,我会写一些类似的东西:

char *p;
if (strcmp(pszKeyName, "FieldOne") == 0) {
    p = struct.string1;
} else if (strcmp(pszKeyName, "FieldTwo") == 0) {
    p = struct.string2;
} else if...

(原谅语法;从来没有擅长指针。)这个想法是我可以把strcpy()变成'p'并且瞧,结构中适当的字符串变量(string1,string2等)更新以匹配。

如何在C#.NET 2.0中实现这一目标?

这是非常简单的代码,我不打算子类化,覆盖,派生或重新发明任何东西。基本上它是一个简单的类,代表一个单一的文本问题和一对是/否复选框。它在Winforms TabControl / TabPage中用于显示带有一些预定文本的Label,并让用户单击“是”或“否”来回答给定的问题文本。该类只代表一组Label / CheckBox / CheckBox控件;有一个List<>他们通过调用代码创建。 (是的,我会使用自定义控件来封装这三个,但是Label的文本的垂直高度以及它的位置在设计时是未知的。但是,这仍然值得研究。)

无论如何,在运行时,调用代码根据同一个大型引用对象中的其他设置确定需要多少这些问题,并根据需要多次实例化这个小类。我已经找到所有屏幕上的定位,甚至在检查CheckBox时检查了......_ CheckedChanged()处理程序。

最后一个问题是,当调用我的“是”和“否”CheckBox处理程序时,他们不知道引用对象的几个数据成员中的哪一个写入“是”或“否”。

1 个答案:

答案 0 :(得分:1)

添加对System.Reflection的引用,然后尝试:

public void SetStringValue(object o, String propertyName, String newValue)
{
    try
    {
        o.GetType().GetProperty(propertyName).SetValue(o, newValue, null);
    }
    catch (Exception ex)
    {
        throw new Exception(String.Format("Failure setting property {0}!", propertyName), ex);
    }
}