C# 动态为对象属性指定值
我有一个属性为ct1-ct5的对象。该对象是自动生成的linq到sql对象。我想在c#中为这些属性赋值。有没有办法在for循环中实现这一点 e、 g.类似(对象名称:new_条件):C# 动态为对象属性指定值,c#,.net,C#,.net,我有一个属性为ct1-ct5的对象。该对象是自动生成的linq到sql对象。我想在c#中为这些属性赋值。有没有办法在for循环中实现这一点 e、 g.类似(对象名称:new_条件): for(inti=1;tag您可以使用反射来完成它。例如,假设您有一个类a,如下所示: class A { public int P1 { get; set; } public int P2 { get; set; } public int P3 { get; set; } } publi
for(inti=1;tag您可以使用反射来完成它。例如,假设您有一个类a
,如下所示:
class A
{
public int P1 { get; set; }
public int P2 { get; set; }
public int P3 { get; set; }
}
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);
}
您可以在这个简单的控制台示例中这样做:
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
除了已经建议的反射之外,您还可以创建一个字典
,为您完成作业。类似如下:
class A
{
public int P1 { get; set; }
public int P2 { get; set; }
public int P3 { get; set; }
}
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);
}
公共静态int a0;
公共静态int a1;
公共静态int a2;
公共静态字典操作=新字典{
{“a0”,val=>a0=val},{“a1”,val=>a1=val},{“a2”,val=>a2=val};
静态void Main(字符串[]参数)
{
对于(int i=0;i<3;i++)
行动[“a”+i](i*2);
控制台写入线(a0);
控制台写入线(a1);
控制台写入线(a2);
}
仅通过反射,我很抱歉,谢谢您的回答。我想我将使用此解决方案。您是否可以详细说明为什么反射是唯一的解决方案。这仅仅是因为GetProperty()方法接受一个字符串参数,因此可以像这样动态使用,或者反射有什么东西适合这种特殊情况吗?反射不是唯一的选项,但在本例中它是更好的选项。好的,但为什么它是更好的选项?请参阅我对另一个选项的回答。它是更好的选项,因为虽然它是sl它比我的解决方案更简单。如果你能处理更复杂的问题,但能获得一点类型安全性和性能,请使用我的答案。你说的“类型安全”是什么意思?一般来说,反射的性能慢吗?