如何从字符串中调用静态类方法?

cpt*_*niz 0 c# json .net-core

请原谅我的无知/错误,因为我是新手和学习者.我有一个带有国家名称的静态类,Finland如下所示.

namespace Countries
{
    public static class Finland
    {
        public static int ID { get; set; } = 7;
        public static string nameOfCountry { get; set; } = "Finland";
        public static string abbreviation { get; set; } = "FI";
        public static string flagLocation { get; set; } = "finishFlag.png";
        public static string GetFlag()
        {
            return "finishFlag.png";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用HttpClient从网站上执行GET请求JSON字符串.然后我使用DeserializeObject将JSON反序列化为一个对象.对象的一个​​变量是string countryName(与字符串nameOfCountry完全匹配).通过使用此字符串(countryName),我想GetFlag()从相应的国家/地区类调用该方法.但是,我不知道如何从字符串中调用此静态方法countryName.我可以将nameOfCountry字符串与countryName字符串进行比较,但是我有24个国家类,如类Finland,这意味着24 if else if语句.

Type.GetType()从StackOverflow中的一个答案中看到了该方法,但我不明白这是如何在这里使用的,因为我没有创建实例.请提供解决方案的示例,以便更容易理解.谢谢.

SO *_*ood 8

您不需要24个不同的类,需要1个类,包含24个实例.

public class Country
{
    public int ID { get; }
    public string NameOfCountry { get; }
    public string Abbreviation { get; }
    public string FlagLocation { get; }

    public Country(int id, string nameOfCountry, string abbreviation, string flagLocation)
    {
        ID = id;
        NameOfCountry = nameOfCountry;
        Abbreviation = abbreviation;
        FlagLocation = flagLocation;
    }        
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果这些属性static与问题中的属性相同,则所有实例都将共享该值,这是您不想要的.

存储这些类(假设您不能使用数据库)的最佳方法是使用Dictionary:

private static Dictionary<string, Country> _countries = new Dictionary<string, Country>
{
    ["Finland"] = new Country(7, "Finland", "FI", "finishFlag.png"),
    ["USA"] = ...
};
Run Code Online (Sandbox Code Playgroud)

然后,您可以按名称访问这些国家/地区:

Country country = _countries["Finland"];
Run Code Online (Sandbox Code Playgroud)

然后,将字段添加到字典比创建新类和添加新if案例要容易得多.

  • @antiduh如果您仍然需要对24种不同的案例进行硬编码,我不确定这有多大帮助.介意扩大一点? (2认同)
  • @Dan在生产代码中我将它提升为常量,然后重用应该不是什么大问题,但是这主要是关于OP没有创建一堆静态类. (2认同)