【发布时间】:2010-07-29 18:10:58
【问题描述】:
我想构建一个接受字符串参数的方法,以及一个我想根据参数返回特定成员的对象。因此,最简单的方法是构建一个 switch 语句:
public GetMemberByName(MyObject myobj, string name)
{
switch(name){
case "PropOne": return myobj.prop1;
case "PropTwo": return myobj.prop2;
}
}
这很好用,但我可能会得到一个相当大的列表......所以我很好奇是否有一种方法,无需编写一堆嵌套的 if-else 结构,以索引方式完成此任务,以便通过索引找到匹配字段,而不是通过开关直到找到匹配项。
我考虑使用Dictionary<string, something> 来快速访问匹配的字符串(作为关键成员),但由于我想访问传入对象的成员,我不确定这是怎么回事完成。
我特别想避免反射等,以便实现非常快速的实现。我可能会使用代码生成,所以解决方案不需要小/紧凑等。
我最初是在构建一个字典,但每个对象都在初始化它。所以我开始把它转移到一个可以根据键查找值的方法——一个 switch 语句。但是由于我不再被索引,我担心调用这个方法的连续查找会很慢。
SO:我正在寻找一种将索引/散列查找的性能(如字典使用)与返回传入对象的特定属性相结合的方法。我可能会将它放在它用于的每个类中的静态方法中。
【问题讨论】:
-
由于 myobj 似乎非常具体(而不是仅仅
object),myobj.Property 还不够,而不是 GetMemberByName(myobj, "Property")? -
只是一个想法,根据标题,我完全误解了您的意图。该示例为我清除了它。看起来这个问题更像是“如何通过名称访问对象的属性”,对吧?
-
为什么
name是一个字符串?这是用户输入的东西吗?它来自文件吗?有什么原因它不是enum? -
我现在在问题中添加一些 cmets,谢谢
标签: c# dictionary switch-statement