在c#中找到一个嵌套的分类静态类的值

本文关键字:嵌套 一个 分类 静态类 | 更新日期: 2023-09-27 18:10:32

我需要在一个结构中找到一个值(我首先想到的是一个静态类,但任何东西都可以),它必须是一个分层结构,如:

public static class SheetGroups
{
    public static class Coverage {
        public static string sheet1 = "COVC1";
        public static string sheet2 = "COVC2";
    }
    public static class IncomeInvestment
    {
        public static string Income1 = "IEIC1";
        public static string Income2 = "IEIC2";
        public static string Income3 = "IEIC3";
        public static string Incomes4 = "IEIC4";
        public static string Investment1 = "IEIC5";
    }
}

这个结构的问题是,我需要组(Coverage和IncomeInvestment)也有值(像一个嵌套的enum),另一个问题是,我必须实现一个IfExistString方法来查找字符串是否存在于分配的值中。

我一直在寻找一个解决方案,现在,但我找不到一个干净的方法。对于那些想知道的人,我需要这个来验证Excel文件的正确结构,根(SheetGroups)代表一个包含一些不确定的Excel文件的zip文件,嵌套类(Coverage和IncomeInvestment)是Excel文件,然后我有表格(COVC1, COVC2等),然后我计划再增加一个级别,在每个工作表中都有表格列。

感谢奥马尔

在c#中找到一个嵌套的分类静态类的值

我相信如果你使用dictionary inside dictionary inside dictionary[…]) 的方式:

// I'm using collection initializers here! 
var groups = new Dictionary<string, Dictionary<string, string>>
{
     { 
          "Coverage", 
          new Dictionary<string, string> 
          {
               { "sheet1", "COVC1" },
               { "sheet2", "COVC2" }
               // And so on...
          }
     },
     {
          "IncomeInvestment",
          new Dictionary<string, string>
          {
               { "Income1", "IEIC1" }
               // And so on...
          }
     }
};

现在你可以这样访问值:

string sheet1 = groups["Coverage"]["sheet1"];

…或者您可以使用开箱即用的IDictionary<TKey, TValue>.ContainsKey(System.String)方法检查某个键是否存在!

我相信这种方法可以简化您的任务,并且您可以使用标准的、开箱即用的字典功能来搜索、验证或访问其值。

您可以像这样使用反射和LINQ获得提到的字典@matías:

var groups = typeof(SheetGroups).GetNestedTypes()
    .ToDictionary(k1 => k1.Name, v1 => v1
            .GetFields().ToDictionary(k2 => k2.Name, v2 => (string)v2.GetValue(null)));

groups变量的类型为Dictionary<string, Dictionary<string, string>>