动态地为对象属性赋值

时间:2014-09-21 02:27:27

标签: c# .net

我有一个属性为ct1 - ct5的对象。该对象是一个自动生成的linq-to-sql对象。我想在c#中为这些属性赋值。有没有办法在for循环中执行此操作?

e.g。像(对象名:new_condition):

for (int i = 1; tag <= 5; i++)
{
   new_condition.cti = values[i];
}

cti中的i被评估。

提前致谢

2 个答案:

答案 0 :(得分:3)

你可以使用反射来做到这一点。例如,假设您有一个类A,如下所示:

class A
{
    public int P1 { get; set; }
    public int P2 { get; set; }
    public int P3 { get; set; }
}

您可以在这个简单的控制台示例中执行此操作:

static void Main(string[] args)
{
    var a = new A();
    foreach (var i in Enumerable.Range(1,3))
    {
        a.GetType().GetProperty("P" + i).SetValue(a, i, null);
    }
    Console.WriteLine("P1 = {0}",a.P1);
    Console.WriteLine("P2 = {0}",a.P2);
    Console.WriteLine("P3 = {0}",a.P3);
    Console.ReadLine();
}

输出将是:

P1 = 1
P2 = 2
P3 = 3

答案 1 :(得分:1)

除了已经建议的反思之外,您还可以创建一个Dictionary<string,Action<T>>来为您完成作业。像这样:

public static int a0;
public static int a1;
public static int a2;

public static Dictionary<string, Action<int>> actions = new Dictionary<string, Action<int>> { 
{"a0", val => a0 = val}, {"a1", val => a1 = val}, {"a2", val => a2 = val }};

static void Main(string[] args)
{
    for (int i = 0; i < 3; i++)
        actions["a" + i](i * 2);

    Console.WriteLine(a0);
    Console.WriteLine(a1);
    Console.WriteLine(a2);
}