gpt4 book ai didi

.NET:字符串键的切换与字典

转载 作者:行者123 更新时间:2023-12-04 01:31:32 26 4
gpt4 key购买 nike

我有一个业务对象,其中包含大约 15 个不同类型的属性。业务对象还必须实现具有以下方法的接口(interface):

object GetFieldValue(string FieldName);

我可以看到两种实现此方法的方法:

使用 switch 语句:
switch ( FieldName )
{
case "Field1": return this.Field1;
case "Field2": return this.Field2;
// etc.
}

使用字典(SortedDictionary 还是 HashTable?):
return this.AllFields[FieldName];

哪个效率更高?

补充:忘了说。此方法用于在网格中显示项目。网格将为这些属性中的每一个提供一列。通常会有超过 1000 个项目的网格。这就是我关心性能的原因。

新增2:

这是一个想法:混合方法。制作一个静态字典,其中键是属性名称,值是数组中的索引。字典仅在应用程序启动时填写一次。每个对象实例都有一个数组。因此,查找将如下所示:
return this.ValueArray[StaticDictionary[FieldName]];

字典填充算法可以使用反射。然后将相应地实现属性本身:
public bool Field1
{
get
{
object o = this.ValueArray[StaticDictionary["Field1"]];
return o == null ? false : (bool)o;
}
set
{
this.ValueArray[StaticDictionary["Field1"]] = value;
}
}

任何人都可以看到这有什么问题吗?

还可以更进一步,ValueArray/StaticDictionary 可以放在单独的泛型类型 ValueCollection<T> 中。 , 其中 T将指定反射的类型。 ValueCollection 也将处理尚未设置值的情况。然后属性可以简单地写成:
public bool Field1
{
get
{
return (bool)this.Values["Field1"];
}
set
{
this.Values["Field1"] = value;
}
}

最后,我又开始怀疑,如果一个简单的 switch 语句可能不会更快更容易维护......

最佳答案

switch:      good efficiency, least maintainable
dictionary: good efficiency, better maintainability
reflection: least efficient, best maintainability

提示:忽略效率并只担心可维护性,除非您实际测试过性能并发现这是一个问题。

我并不是说反射是您唯一的选择,只是它允许您根据需要添加/删除和重命名属性,并且不需要保持 switch 语句或字典同步。

关于.NET:字符串键的切换与字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1334087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com