动态访问公共类成员

时间:2014-12-01 14:41:01

标签: c#

public class Names
{
    private string _name1 = "";
    private string _name2 = "";
    private string _name3 = "";

    public string Name1
    {
      get { return _name1; }
      set { _name1 = value; }
    }

    public string Name2
    {
      get { return _name2; }
      set { _name2 = value; }
    }

    public string Name3
    {
      get { return _name3; }
      set { _name3 = value; }
    }
}

collection Names = new Names();

我有一长串文字(longString)。如果位置10的文本是2,那么我需要为两个名称设置值:Name1和Name2。我的变量属于我已经实现过的类。所以我需要动态设置动态数量的变量值。如何调用变量并动态设置值?基本上是这样的:

for (int i = 1; i <= collection.Count(); i++)
{
    col.Name + i = longString.Substring(11, 4);
}

2 个答案:

答案 0 :(得分:1)

试试这个:

public class Names
{
    public string Name1 { get; set; }
    public string Name2 { get; set; }
    public string Name3 { get; set; }
}

for (int i = 1; i <= collection.Count(); i++)
{
    var col = collection.ElementAt(i);
    col.GetType().GetProperty("Name + i").SetValue(col, longString.Substring(11, 4), null);
}

Name1,Name2和Name3是自动实现的属性。我们使用反射按名称获取属性并设置其值。

答案 1 :(得分:1)

比使用反射更快:

public class Names
{
    private string[] _names = {"", "", ""};
    public string[] Names { get {return _names; } } // ReadOnlyCollection?

    public string Name1
    {
       get { return _names[0]; }
       set { _names[0] = value; }
    }
}