C# 需要帮助实现三个值的某种列表吗

C# 需要帮助实现三个值的某种列表吗,c#,.net,list,dictionary,search-engine,C#,.net,List,Dictionary,Search Engine,正在研究在应用程序中使用现有搜索引擎的新方法。其思想是使用前缀进行搜索,而不是在搜索前检查复选框中的首选值。类似这样:“#12345678”而搜索引擎将返回电话号码的结果 问题是此搜索由三个值组成。我有两个枚举SearchCriteria和SearchType。第三个值是作为字符串值的实际前缀 解决这个问题最有效的方法是什么?我们一直在寻找KeyValuePairs,但最终似乎有点混乱 我也试着在字典里保留不同的可能性 prefixes = new Dictionary<string, K

正在研究在应用程序中使用现有搜索引擎的新方法。其思想是使用前缀进行搜索,而不是在搜索前检查复选框中的首选值。类似这样:“#12345678”而搜索引擎将返回电话号码的结果

问题是此搜索由三个值组成。我有两个枚举SearchCriteria和SearchType。第三个值是作为字符串值的实际前缀

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

我也试着在字典里保留不同的可能性

prefixes = new Dictionary<string, KeyValuePair<SearchCriteria, SearchType>> {
    { values },
    { values }
}
前缀=新字典{
{values},
{values}
}

建议(请?:)

您可以只使用一个结构

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");
元组(
SearchCriteria.正常,/*只是虚构的*/
SearchType。还有,/*那个*/
"#12345678");

两者都是“最有效的”

您可以只使用一个结构

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");
元组(
SearchCriteria.正常,/*只是虚构的*/
SearchType。还有,/*那个*/
"#12345678");

这两种方法都是“最有效的”

只写一个简单的值类型来保存这些信息有什么不对

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;

只写一个简单的值类型来保存这些信息有什么错

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;

您在示例中所讨论的称为多重映射或多重哈希-您在示例中所讨论的称为多重映射或多重哈希-