首页 > 解决方案 > 在 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>()?或者这是最好的优雅方式?

你能给我一些建议,我可以从哪里开始,或者我在哪里可以找到解决方案?

标签: c#dictionarymethodstypeslookup-tables

解决方案


由于这更多地是关于控制代码流而不是纯粹的查找,我可能会使用面向对象的方法并将每个“处理程序”的代码放在单独的类中(在基类中包含通用的东西)。

您可以创建一个通用界面,例如

public interface ITypeHandler {
    void HandleType(Type type);
}

...如果您愿意,可以将处理程序的实现放在类型字典中Dictionary<Type, ITypeHandler>,或者您可以在接口上有一个属性,显示它处理的类型并从基于此属性的(可能是依赖注入的)处理程序列表中进行选择。

这增加了诸如关注点分离、可测试性等好处。

(请注意,*Handler 不是一个很好的名称,您必须根据您所涵盖的场景创建一个更好的名称。)


推荐阅读