Нужна помощь в реализации какого-то списка для трех значений - PullRequest
1 голос
/ 23 ноября 2011

Работа над новым способом использования уже существующего поискового движка в приложении.Идея заключается в использовании префиксов для поиска вместо проверки предпочтительных значений в флажках перед поиском.Примерно так: «# 12345678», тогда как поисковик будет возвращать результат для телефонного номера.

Проблема состоит в том, что этот поиск состоит из трех значений.У меня есть два перечисления SearchCriteria и SearchType.Третье значение - это фактический префикс в виде строкового значения.

Каков наиболее эффективный способ решения этой проблемы?Я заглядывал в KeyValuePairs, но, похоже, это немного запутанно.

Я также пытался сохранить разные возможности в словаре.

prefixes = new Dictionary<string, KeyValuePair<SearchCriteria, SearchType>> {
    { values },
    { values }
}

Предложения, пожалуйста?:)

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Что плохого в том, чтобы просто написать простой тип значения для хранения этой информации?

public struct Search
{
    public Search(SearchCriteria criteria, SearchType type, string prefix) { ... }

    public readonly SearchCriteria Criteria;
    public readonly SearchType Type;
    public readonly String Prefix;
}

Поместив различные типы поиска в список, вы можете использовать linq, чтобы получить тип и критерии для определенного префикса ...

Search[] searches = new []
{
    new Search(SearchCriteria.PhoneNumber, SearchType.Match, "#"),
    new Search(SearchCriteria.PostCode, SearchType.CaseInsensetive, "*")
}

string prefix = "#";

var searchCriteria = searches.Single(x => x.Prefix = prefix).Criteria;
var searchType     = searches.Single(x => x.Prefix = prefix).Type;
2 голосов
/ 23 ноября 2011

Вы можете использовать только структуру

struct ValueParts
{    
     public readonly SearchCriteria criteria;
     public readonly SearchType type;
     public readonly string prefix; 

     public ValueParts(SearchCriteria c, SearchType t, string p) 
     {
         criteria = c;
         type = t;
         prefix = p;
     }
}

Или кортеж C # 4.0:

Tuple<SearchCriteria, SearchType, string> tuple(
      SearchCriteria.Normal, /*just making that up*/
      SearchType.And,       /* that too*/
      "#12345678");

Оба будут «наиболее эффективными»

...