【问题标题】:find a value in a nested categorized static class in C#在 C# 的嵌套分类静态类中查找值
【发布时间】:2014-06-27 21:21:49
【问题描述】:

我需要在一个结构中找到一个值(我想到的第一个是静态类,但任何事情都可以),它必须是一个层次结构,例如:

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)也有值(如嵌套枚举),另一个问题是我必须实现一个 IfExistString 方法来查找字符串中是否存在赋值。

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

谢谢

奥马尔

【问题讨论】:

  • 请阐明您的业务需求:您将使用这个嵌套的静态类来实现什么? Rgds,
  • 感谢您的回复。我的应用程序的一个主要任务是逐个单元格地验证一组压缩的 Excel 文件,这些文件可以有一个或多个带有一组或多组编码列和行的工作表(编码是指在第一行和第一列我有编码值以识别工作表内的单元格内容. 有一个要求是不要阻止/保护书中任何有意义的值的内容(甚至是编码的列和行) 话虽这么说,我需要完成的是使用嵌入在应用程序中的元数据验证这些代码(行和列)。我希望这会有所帮助...
  • btw 这是一个没有互联网或局域网连接的winforms独立应用程序

标签: c# arrays excel static-classes


【解决方案1】:

我相信,如果您使用 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&lt;TKey, TValue&gt;.ContainsKey(System.String) 方法检查是否存在某些密钥!

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

【讨论】:

  • @culebrin 没问题。认为您的初始方法需要反思,而这最终会导致过度杀伤和过度工程......
  • 好吧,我努力了,但甚至无法开始声明这段代码!它一直说“类、结构或接口成员声明中的令牌'{'无效”。 (代码:postimg.org/image/p0s8tgpyl
  • @culebrin 在 pastebin.com 或类似的地方发布整个代码或其中的一部分,以便我可以给你一些建议
  • 好的,这里是:pastebin.com/Wf8sbSQr,该类位于文件的底部...我想我需要一些 C# 字典基础指南之类的...
  • @culebrin 嗯,我相信你误解了我的方法。您需要创建一个名为(例如)_dictionary 的类级变量(一个字段),并在类构造函数中,将整个字典字典设置为整个变量。
【解决方案2】:

您可以像这样使用反射和 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&lt;string, Dictionary&lt;string, string&gt;&gt;

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2021-10-06
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多