首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从任意文本文件创建匿名类型对象

从任意文本文件创建匿名类型对象
EN

Stack Overflow用户
提问于 2010-05-04 05:03:00
回答 4查看 1.4K关注 0票数 1

我需要一种明智的方法来将任意文本文件绘制到C#程序中,并生成任意匿名类型的对象,或者某种类型的复合字典。

我有一个具有代表性的文本文件,如下所示:

代码语言:javascript
复制
adapter 1: LPe11002
  Factory IEEE: 10000000 C97A83FC
  Non-Volatile WWPN: 10000000 C93D6A8A , WWNN: 20000000 C93D6A8A
adapter 2: LPe11002
  Factory IEEE: 10000000 C97A83FD
  Non-Volatile WWPN: 10000000 C93D6A8B , WWNN: 20000000 C93D6A8B

有没有一种方法可以将这些信息输入到匿名类型对象或类似的结构中?

如果最后的匿名类型是手工在C#中编写的,那么它可能类似于这样:

代码语言:javascript
复制
new
{
    adapter1 = new 
    { 
        FactoryIEEE = "10000000 C97A83FC",
        Non-VolatileWWPN = "10000000 C93D6A8A",
        WWNN = "20000000 C93D6A8A"
    }
    adapter2 = new 
    { 
        FactoryIEEE = "10000000 C97A83FD",
        Non-VolatileWWPN = "10000000 C93D6A8B",
        WWNN = "20000000 C93D6A8B"
    }
}

注意,由于文本文件的内容是任意的(即键可以是任何内容),一个专门的解决方案(例如,查找“FactoryIEEE”之类的名称)将无法工作。但是,文件的结构总是相同的(例如,组、冒号和逗号分隔符等的缩进)。

或者我走错路了,你有更好的主意吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-04 05:13:00

你走错路了。您的“匿名类型对象”数据很难构造,也很难使用。要构建它,您必须使用反射诡计。为了什么呢?

考虑一个PrintReport函数。由于ATO的使用,这个函数不会变得更简单。与之不同的是,它会变得更加复杂和缓慢,必须使用反射本身来迭代键。如果有少量固定数量的可能密钥,您的解决方案可能是有意义的。然后使用语法(如"obj.FactoryIEEE“)可能会更好。

我做这件事的方式是用一个List<Dictionary<string, string>>,或者,比如说List<AdapterRecord>,AdapterRecord在那里

代码语言:javascript
复制
class AdapterRecord
{
    public string Name { get; set; }
    public Dictionary<string, string> Parameters { get; set; }
}
票数 4
EN

Stack Overflow用户

发布于 2010-05-04 05:15:38

看看这篇分为2部分的文章。它以流畅的方式解析XML文件。我认为它可以用来解析你的文本文件。

  • 使用C#的动态类型进行Fluent XML解析第1部分
  • 使用C#的动态类型进行Fluent XML解析第2部分

它使用C# 4动态类型来执行您想做的事情。

票数 4
EN

Stack Overflow用户

发布于 2010-05-04 05:13:17

看起来,即使在C# 4中也无法做到这一点。

此外,如果您不知道这些键是什么,那么任何类型的强类型访问都会很困难,那么简单的拆分+插入字典/列表/等等就更有意义了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2762915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档