0

我之前曾在这个论坛上发布过一个问题——“将内部类型转换为通用名称/值对列表”。我确实收到了一些很棒的答案,这为我指明了使用反射的方向,我做了一个简短的概念证明,看起来不错。然而,在使用反射、性能等方面存在一些问题。我想知道还有其他方法吗?

请参阅下面的要求大纲:

我们只想获取一个内部类型,检查该字段是否存在于枚举或列表中,如果它被填充,则将其移动到通用名称/值对列表中。这样我们就可以以通用/标准方式发送大量信息,而无需担心添加新字段时会更改架构等。我的问题是如何填充通用结构。

[Serializable]
public class Location
    {   
          public string sAddress { get; set; }
          public string sCity { get; set; }
          public int iZipCode { get; set; }
    }

需要转化为:

<AttributeList>
  <Attribute>
    <Name>sAddress</Name>
    <Value>123 ABC Street</Value>
    <DataType>string</DataType>
  </Attribute>
</AttributeList>

重复 sCity 和 iZipCode。我能想到的唯一方法(不使用反射)是为内部结构上的每个字段手动编码 - 位对我来说似乎非常无效

任何想法,将不胜感激!!

4

1 回答 1

3

反射不必非常低效。如果您知道您将一遍又一遍地执行基本相同的代码,您可以从基于反射的成员创建委托。这些将执行更快。查看Delegate.CreateDelegate各种选项(请记住,属性基本上只是一个 get/set 方法对)。

如果您使用的是 .NET 3.5,则可以使用表达式树作为构建委托的一种替代方法。

一旦你得到了基于委托的表单,性能应该是相当合理的。

于 2013-02-28T09:17:31.163 回答