繁体   English   中英

C#自定义属性替代

[英]C# Custom Attribute Alternatives

目前,我已经创建了一个具有约30个属性的类。 这样做是为了稍后建立URL请求(即“ http://www.domain.com/test.htm?var1=a&var2=b...&var30=dd ”)。

我面临的问题是属性名称不一定与查询变量名称匹配(这是不同的)。 例如,我可能有一个名为“BillAddress”的变量,而查询变量需要是“as_billaddress”。

我无法控制查询变量命名方案,因为它们是在外部源设置的。

我使用的一种可能的解决方案是创建自定义属性并使用各自的查询对应项来装饰属性:

[CustomQueryAttribute("as_billaddress")]
string BillAddress{get;set;}

虽然要检索属性,需要稍微反思,并且由于更多的属性,我很好奇是否有更简洁的方法来完成此功能。 不是在没有反射的情况下设置/检索自定义属性,而是能够将备用字符串变量绑定到任何属性。

我也一直在考虑将每个变量设置为一种KeyValuePair,每个键代表查询对应物,但我并没有在这个想法中走得太远。

总结/澄清我的上述背景故事,你会怎样做一个字符串与属性(不是属性的值)?

与往常一样,任何评论都非常感谢。

我可能会坚持使用自定义属性,但另一个可能的选择是执行类似于保存具有字符串和属性信息(或属性名称)的静态字典,因此您可以通过此直接获取/设置属性。

就像是:

static Dictionary<string, PropertyInfo> propertyMap = new Dictionary<string, PropertyInfo>();

static MyClass()
{
     Type myClass = typeof(MyClass);
     // For each property you want to support:
     propertyMap.Add("as_billaddress", MyClass.GetProperty("BillAddress"));
     // ...
}

然后,您可以在每次调用中执行字典查找而不是使用反射...这也可以使用配置设置相当简单,因此您可以在运行时重新配置映射。

自定义属性对我来说似乎是最好的选择 - 框架似乎也做了很多(特别是序列化)。

如果你看一下流行的ORM映射器,那么几乎所有的都使用自定义属性或某种XML映射文件。 后者的优点是您可以修改映射而无需重新编译应用程序 - 缺点是它会损害性能。 但是,我会说你的选择似乎非常合理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM