c# - 在 C# 中使用类型和操作查找表
问题描述
我想将我的许多 if 更改为查找表。
我有类型和方法。我想把它们配对。
if (propertyType == typeof(bool) || propertyType == typeof(bool?))
DoBool(propertyType);
if (propertyType == typeof(DateTime) || propertyType == typeof(DateTime?))
DoDateTime(propertyType);
if (propertyType == typeof(Guid) || propertyType == typeof(Guid?))
DoGuid(propertyType);
我必须创建一个Dictionary<Type, Action>()
?或者这是最好的优雅方式?
你能给我一些建议,我可以从哪里开始,或者我在哪里可以找到解决方案?
解决方案
由于这更多地是关于控制代码流而不是纯粹的查找,我可能会使用面向对象的方法并将每个“处理程序”的代码放在单独的类中(在基类中包含通用的东西)。
您可以创建一个通用界面,例如
public interface ITypeHandler {
void HandleType(Type type);
}
...如果您愿意,可以将处理程序的实现放在类型字典中Dictionary<Type, ITypeHandler>
,或者您可以在接口上有一个属性,显示它处理的类型并从基于此属性的(可能是依赖注入的)处理程序列表中进行选择。
这增加了诸如关注点分离、可测试性等好处。
(请注意,*Handler 不是一个很好的名称,您必须根据您所涵盖的场景创建一个更好的名称。)
推荐阅读
- r - 那么,Carets jumpBackward 究竟是如何工作的呢?
- python - 使用 Python 中的入住和退房日期计算每天的预订数量
- c# - 将 DataGrid 行号绑定到属性
- reactjs - React useHistory,对象的类型为“未知”
- firebase - flutter build apk --release 在运行flutter build apk时失败-调试工作正常
- javascript - 从两个不同的数组中创建键值对
- android - 从我的应用程序播放和暂停外部音频?
- machine-learning - 学习者的基准比较结果取决于重采样的实例化。我该如何解释呢?
- visual-studio - Visual Studio 2019 - 使用本地 Nuget 存储库时包管理器 GUI 冻结,但当提琴手工作时它工作得很快
- vb.net - 为结构中的属性赋值