我之前在这个论坛上发布了一个问题-“将内部类型转换为泛型名称/值对列表”。我确实收到了一些很好的答案,它们为我指明了使用反射的方向,我做了一个简短的概念证明,它看起来很好。然而,关于反射的使用,在性能等方面存在一些问题。我想知道有没有其他方法来做到这一点?
请参见下面的需求概要:
我们只想获取一个内部类型,检查字段是否存在于枚举或列表中,如果它已填充,则将其移动到泛型名称/值对列表中。这是因为我们可以以通用/标准的方式发送大量信息,而不必担心在添加新字段时更改模式等问题。我的问题是如何填充泛型结构。
[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重复上述步骤。我能想到的唯一方法(不使用反射)是在内部结构位上为每个字段手动编码-位对我来说似乎非常无效
任何想法都将不胜感激!
发布于 2013-02-28 09:17:31
反射不一定是非常低效的。如果您知道要一遍又一遍地执行基本上相同的代码,则可以从基于反射的成员创建委托。它们的执行速度会快得多。有关各种选项的信息,请参阅Delegate.CreateDelegate
(请记住,属性基本上只是一个get/set方法对)。
如果您使用的是.NET 3.5,则可以使用表达式树作为构建代理的一种较小的替代方法。
一旦你获得了基于委托的表单,性能应该相当合理。
https://stackoverflow.com/questions/15131591
复制