我之前在此论坛上发布了一个问题 - '将内部类型转换为通用名称/值对列表'。我确实收到了一些很好的答案,这些答案指出了我使用反射的方向,我做了一个简短的概念证明,看起来很好。然而,就性能等问题而言,在反射的使用方面存在一些问题。我想知道有没有其他方法可以做到这一点?
请参阅以下要求的大纲:
我们只想获取一个内部类型,检查该字段是否存在于枚举或列表中,以及填充它是否将其移动到通用名称/值对列表中。这样我们就可以以一般/标准的方式发送大量信息,而不必担心如果添加新字段则更改模式等。我的问题是如何填充通用结构。
[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。我能想到的唯一方法(不使用反射)是手动编写内部结构上的每个字段 - 对我来说似乎非常无效
任何想法都会受到赞赏!!
答案 0 :(得分:3)
反思不一定非常低效。如果您知道要反复执行基本相同的代码,则可以从基于反射的成员创建委托。那些将更快地执行更多。有关各种选项,请参阅Delegate.CreateDelegate
(记住属性基本上只是一个get / set方法对)。
如果您使用的是.NET 3.5,则可以使用表达式树作为构建委托的一种轻微替代方法。
一旦你获得了基于代表的表单,性能应该是非常合理的。