2015-06-03 2 views
2

Я хотел бы сделать ниже методы generic, этот метод выполняет поиск с использованием службы поиска, а все возможные 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"]); 
} 

Я вижу, что мое решение действительно ужасно. Главным образом, я не люблю переключатели или ifs разбор каждого типа. Это делает код не столь гибким, чтобы его масштабировать.

Я хотел бы иметь более элегантное решение, но у меня такое ощущение, что это не лучший пример использования общих методов. Не могли бы вы дать мне несколько советов по этому размышлению?

+0

Я не думаю, что это хорошее решение, я хотел бы сохранить эти два метода. Что произойдет, если вы вызываете его с помощью DoSearch '? Это юридический код в отношении компилятора, но в конечном итоге поиск неправильного словаря (скорее всего). Это то, что вы хотите? * Почему * вы чувствуете необходимость сочетания? –

ответ

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))]); 
} 
+0

Просто отлично !, спасибо, Дмитрий. – Josema