Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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#_Class_Reflection - Fatal编程技术网

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

C# 有没有一种方法可以访问类的成员,在访问时使用字符串而不是类名,c#,class,reflection,C#,Class,Reflection,我希望使用一些反射来访问类中的所有成员并获取它们的值。这是全班的。我总是初始化Championsids类。我知道有很多代码,但很简单 public class ChampionIds { public string type; public string format; public string version; public Data data; }

我希望使用一些反射来访问类中的所有成员并获取它们的值。这是全班的。我总是初始化Championsids类。我知道有很多代码,但很简单

        public class ChampionIds
        {
            public string type;
            public string format;
            public string version;
            public Data data;
        }

        public class Data
        {
            public Champions Aatrox;
            public Champions Ahri;
            public Champions Akali;
            public Champions Alistar;
            public Champions Amumu;
            public Champions Anivia;
            public Champions Annie;
            public Champions Ashe;
            public Champions AurelionSol;
            public Champions Azir;
            public Champions Bard;
            public Champions Blitzcrank;
            public Champions Brand;
            public Champions Braum;
            public Champions Caitlyn;
            public Champions Camille;
            public Champions Cassiopeia;
            public Champions Chogath;
            public Champions Corki;
            public Champions Darius;
            public Champions Diana;
            public Champions Draven;
            public Champions DrMundo;
            public Champions Ekko;
            public Champions Elise;
            public Champions Evelynn;
            public Champions Ezreal;
            public Champions FiddleSticks;
            public Champions Fiora;
            public Champions Fizz;
            public Champions Galio;
            public Champions Gangplank;
            public Champions Garen;
            public Champions Gnar;
            public Champions Gragas;
            public Champions Graves;
            public Champions Hecarim;
            public Champions Heimerdinger;
            public Champions Illaoi;
            public Champions Irelia;
            public Champions Ivern;
            public Champions Janna;
            public Champions JarvanIV;
            public Champions Jax;
            public Champions Jayce;
            public Champions Jhin;
            public Champions Jinx;
            public Champions Kalista;
            public Champions Karma;
            public Champions Karthus;
            public Champions Kassadin;
            public Champions Katarina;
            public Champions Kayle;
            public Champions Kennen;
            public Champions Khazix;
            public Champions Kindred;
            public Champions Kled;
            public Champions KogMaw;
            public Champions Leblanc;
            public Champions LeeSin;
            public Champions Leona;
            public Champions Lissandra;
            public Champions Lucian;
            public Champions Lulu;
            public Champions Lux;
            public Champions Malphite;
            public Champions Malzahar;
            public Champions Maokai;
            public Champions MasterYi;
            public Champions MissFortune;
            public Champions MonkeyKing;
            public Champions Mordekaiser;
            public Champions Morgana;
            public Champions Nami;
            public Champions Nasus;
            public Champions Nautilus;
            public Champions Nidalee;
            public Champions Nocturne;
            public Champions Nunu;
            public Champions Olaf;
            public Champions Orianna;
            public Champions Pantheon;
            public Champions Poppy;
            public Champions Quinn;
            public Champions Rammus;
            public Champions RekSai;
            public Champions Renekton;
            public Champions Rengar;
            public Champions Riven;
            public Champions Rumble;
            public Champions Ryze;
            public Champions Sejuani;
            public Champions Shaco;
            public Champions Shen;
            public Champions Shyvana;
            public Champions Singed;
            public Champions Sion;
            public Champions Sivir;
            public Champions Skarner;
            public Champions Sona;
            public Champions Soraka;
            public Champions Swain;
            public Champions Syndra;
            public Champions TahmKench;
            public Champions Taliyah;
            public Champions Talon;
            public Champions Taric;
            public Champions Teemo;
            public Champions Thresh;
            public Champions Tristana;
            public Champions Trundle;
            public Champions Tryndamere;
            public Champions TwistedFate;
            public Champions Twitch;
            public Champions Udyr;
            public Champions Urgot;
            public Champions Varus;
            public Champions Vayne;
            public Champions Veigar;
            public Champions Velkoz;
            public Champions Vi;
            public Champions Viktor;
            public Champions Vladimir;
            public Champions Volibear;
            public Champions Warwick;
            public Champions Xerath;
            public Champions XinZhao;
            public Champions Yasuo;
            public Champions Yorick;
            public Champions Zac;
            public Champions Zed;
            public Champions Ziggs;
            public Champions Zilean;
            public Champions Zyra;
        }

        public class Champions
        {
            public string version;
            public string id;
            public string key;
            public string name;
            public string title;
            public string blurb;
            public Dictionary<string, int> info;
            public Dictionary<string, string> image;
            public List<string> tags;
            public string partype;
            public Dictionary<string, double> stats;
        }
但问题是我想把所有不同的冠军钥匙和名字都放到字典里。像这样

Dictionary<string, string> ChampIdDict = new Dictionary<string, string>();
ChampIdDict.Add(championIds.data.Aatrox.key, championIds.data.Aatrox.name);
结果就是这样

Aatrox
Ahri
Akali
Alistar
Amumu
Anivia
//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,然后我说 字符串returnedChampionId=//来自网站ex.266 字符串championName=ChampIdDict[266]


谢谢你的阅读。希望您能推荐一些内容

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

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);

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

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);

相反,类数据使用字典…我不太确定这和我的问题有什么关系。编辑:顺便说一句,我不能这样做已经测试过了。我从JSON反序列化中获得输入,因此基本上that@Bjørndrachman你需要用字典来做这件事。如果你这么说的话,我可以用字典试试。但是我从Newtonsoft库的一些JSON中得到了它,所以我不知道这是否有效。但谢谢你的评论,而不是课堂数据使用字典…我不太确定这和我的问题有什么关系。编辑:顺便说一句,我不能这样做已经测试过了。我从JSON反序列化中获得输入,因此基本上that@Bjørndrachman你需要用字典来做这件事。如果你这么说的话,我可以用字典试试。但是我从Newtonsoft库的一些JSON中得到了它,所以我不知道这是否有效。但是谢谢你的评论,这段代码很有效。非常感谢。我没有使用GetValueactualDataObject,而是使用GetValuechampionIds.data。这段代码有效。非常感谢。我使用的不是GetValueactualDataObject,而是GetValuechampionIds.data
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)
}
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);