为了账号安全,请及时绑定邮箱和手机立即绑定

有没有一种方法可以访问类的成员,在访问时使用字符串而不是类名

有没有一种方法可以访问类的成员,在访问时使用字符串而不是类名

C#
繁花不似锦 2023-07-09 16:21:02
我希望使用一些反射来访问类中的所有成员并获取它们的值。这是班级的。我总是初始化“Championsids”类。(我知道有很多代码,但它非常简单)。当我初始化它时,值会自动分配给所有成员。一切正常ChampionIds championIds = JsonConvert.DeserializeObject<ChampionIds>(json2); //Assignment works perfect!现在我可以这样访问所有值。仅作为使用示例Console.WriteLine(championIds.data.Aatrox.id);Console.WriteLine(championIds.data.Aatrox.key);Console.WriteLine(championIds.data.AurelionSol.version);Console.WriteLine(championIds.data.AurelionSol.title);但问题是我想将所有不同的冠军键和名称放入字典中。所以像这样的事情。Dictionary<string, string> ChampIdDict = new Dictionary<string, string>();ChampIdDict.Add(championIds.data.Aatrox.key, championIds.data.Aatrox.name);我想为每个冠军做到这一点。对于这样的例子Dictionary<string, string> ChampIdDict = new Dictionary<string, string>();ChampIdDict.Add(championIds.data.Aatrox.key, championIds.data.Aatrox.name);ChampIdDict.Add(championIds.data.Ahri.key, championIds.data.Ahri.name);ChampIdDict.Add(championIds.data.Akali.key, championIds.data.Akali.name);//and so on但我不想以这种方式在我的代码中编写 100 行。所以我遍历所有成员并使用此代码轻松获取他们的名字FieldInfo[] fields = typeof(Data).GetFields();foreach (var field in fields){     Console.WriteLine(field.Name);}结果是这样的AatroxAhriAkaliAlistarAmumuAnivia//and so on我该怎么做才能做到这一点FieldInfo[] fields = typeof(Data).GetFields();foreach (var field in fields){    Console.WriteLine("Inserting champion = " + field.Name + " into the dictionary");    string key = championIds.data.(field.Name).key;    string name = championIds.data.(field.Name).name;    ChampIdDict.Add(key, name)}结果是我简单地从网站获取冠军 id,然后我说 string returnedChampionId = //from website ex. 第266章 266谢谢阅读。希望你能推荐一些东西
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

您需要从每个字段获取值并将其转换为适当的类型。然后就可以访问内部属性了


Data actualDataObject = // whereever you get it from

Dictionary<string, string> ChampIdDict = new Dictionary<string, string>();


FieldInfo[] fields = typeof(Data).GetFields();

foreach (var field in fields)

{

    Champions temp = (Champions)field.GetValue(actualDataObject);

    string key = temp.key;

    string name = temp.name;

    ChampIdDict.Add(key, name)

}

在 linq 中,这可能看起来像这样:


Dictionary<string, string> ChampIdDict = (from field in fields

                                    let temp = (Champions)field.GetValue(actualDataObject)

                                    select new {key = temp.key, name = temp.name})

                                   .ToDictionary(x => x.key, x => x.name);


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信