通用方法替换两个内容的技术问题标题

3

我希望将以下方法通用化,该方法使用搜索服务进行搜索,所有可能的URL都在一个字典中。

public XDocument DoSearchForTypeA()
{
    return searchService.Search(dictionary["optiona"]);
}

public XDocument DoSearchForTypeB()
{
    return searchService.Search(dictionary["optionb"]);
}

我在考虑做类似于这样的事情:
public XDocument DoSearch<T>()
{
    if(typeof(T)==typeof(MyTypeA))
    {
        return searchService.Search(dictionary["optiona"]);
    }
    return searchService.Search(dictionary["optionb"]);
}

我觉得我的解决方案很糟糕。主要是因为我不喜欢每种类型都要用开关或者if语句进行解析。这使得代码在扩展时不太灵活。

我希望有一个更优雅的解决方案,但我感觉这不是使用通用方法的最佳示例。您能给我一些关于反射的建议吗?


我不认为这是一个好的解决方案,我会保留这两个方法。如果你用DoSearch<string>来调用它会发生什么?在编译器看来,这是合法的代码,但最终会搜索错误的字典(很可能)。这是你想要的吗?你为什么觉得有必要进行组合? - Lasse V. Karlsen
1个回答

4

字典是其中一种选项:

private static Dictionary<Type, String> s_Search = new Dictionary<Type, String>()
{
    {typeof(MyTypeA), "optiona"},
    {typeof(MyTypeB), "optionb"}
}

...

public XDocument DoSearch<T>()
{ 
    return searchService.Search(dictionary[s_Search(typeof(T))]);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接