需要帮助实现三种值的某种列表

时间:2011-11-23 08:59:01

标签: c# .net list dictionary search-engine

在应用程序中使用已有的搜索引擎的新方法。我们的想法是使用前缀进行搜索,而不是在搜索之前检查复选框中的首选值。像这样的东西:“#12345678”而searchengine会返回一个电话号码的结果。

问题在于此搜索包含三个值。我有两个枚举SearchCriteria和SearchType。第三个值是实际前缀作为字符串值。

解决此问题的最有效方法是什么?一直在寻找KeyValuePairs,但这似乎有点混乱。

我曾尝试在词典中保留不同的可能性。

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

建议好吗? :)

2 个答案:

答案 0 :(得分:2)

您只能使用结构

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");

两者都是'效率最高'

答案 1 :(得分:2)

只是编写一个简单的值类型来保存这些信息有什么问题?

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

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

将各种搜索类型放入列表中,您可以使用linq获取类型&amp;特定前缀的标准......

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;