Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中用标识符和变量值映射值#_C#_Linq - Fatal编程技术网

C# 如何在C语言中用标识符和变量值映射值#

C# 如何在C语言中用标识符和变量值映射值#,c#,linq,C#,Linq,如何在C语言中用标识符和变量值映射值# 将FIELD1、FIELD2、FIELD3、…、FIELDxx映射到名为FIELD1、FIELD2、FIELD3、…、FIELDxx的类动物 public class Animal { public string Name { get; set; } public string Value { get; set; } } List<Animal> a = new List<Animal>(); a.Add(ne

如何在C语言中用标识符和变量值映射值#

将FIELD1、FIELD2、FIELD3、…、FIELDxx映射到名为FIELD1、FIELD2、FIELD3、…、FIELDxx的类动物

public class Animal
{
     public string Name { get; set; }
     public string Value { get; set; }
}

List<Animal> a = new List<Animal>();
a.Add(new Animal(){
     Name = "FIELD1",
     Value = "Elephant"
});
公共类动物
{
公共字符串名称{get;set;}
公共字符串值{get;set;}
}
列表a=新列表();
a、 添加(新动物){
Name=“FIELD1”,
Value=“大象”
});
像这样的东西

var t = new Table1();

foreach(var animal in a)
{
  t.GetType().GetProperty(animal.Name).SetValue(t, animal.Value);
}
C#字典可用于维护用于此映射目的的集合。在字典中,对于给定的情况

var t = new Table1();
Animal a = new Animal();

Dictionary<string, string> idVarMap = new Dictionary<string, string>();
idVarMap.Add(t.FIELD1,a.Value);

这样有用吗?或者您正在寻找其他方法?

基思的回答已经指明了方向。以下是您具体问题的代码:

var t = new Table1() 
{
    FIELD1 = "Elephant",
    FIELD2 = "Cat",
    FIELD3 = "Dog",
};
List<Animal> a = new List<Animal>();

foreach(var prop in t.GetType().GetProperties().Where(p => p.Name.StartsWith("FIELD")))
{
    a.Add(new Animal()
    {
        Name = prop.Name,
        Value = (string)prop.GetValue(t)
    });
}
var t=new Table1()
{
FIELD1=“大象”,
FIELD2=“Cat”,
FIELD3=“狗”,
};
列表a=新列表();
foreach(t.GetType().GetProperties()中的var prop.Where(p=>p.Name.StartsWith(“字段”))
{
a、 添加(新动物)
{
Name=prop.Name,
Value=(字符串)prop.GetValue(t)
});
}

您是否正在尝试为
表1
的每个
字段创建
动物
?反射是最简单的选择,但这一切看起来都像一个nightmare@Gildor当然,我正在尝试创建FIELD1=>大象,FIELD2=>Cat@ArnunSae-请核对答案。但是,当性能很重要时,仔细使用反射。似乎
a
是一个空列表,他正在尝试创建实例。他将动物的实例添加到a中,该实例的名称对应于表1中的属性,因此作为示例,然后把这个属性的值设为动物的名字他可以很容易地换成另一种方式too@KeithNicholas谢谢
if (idVarMap.ContainsKey(t.FIELD1))
{
    int value = idVarMap[t.FIELD1];
    Console.WriteLine(value);
}
var t = new Table1() 
{
    FIELD1 = "Elephant",
    FIELD2 = "Cat",
    FIELD3 = "Dog",
};
List<Animal> a = new List<Animal>();

foreach(var prop in t.GetType().GetProperties().Where(p => p.Name.StartsWith("FIELD")))
{
    a.Add(new Animal()
    {
        Name = prop.Name,
        Value = (string)prop.GetValue(t)
    });
}