在应用程序中使用已有的搜索引擎的新方法。我们的想法是使用前缀进行搜索,而不是在搜索之前检查复选框中的首选值。像这样的东西:“#12345678”而searchengine会返回一个电话号码的结果。
问题在于此搜索包含三个值。我有两个枚举SearchCriteria和SearchType。第三个值是实际前缀作为字符串值。
解决此问题的最有效方法是什么?一直在寻找KeyValuePairs,但这似乎有点混乱。
我曾尝试在词典中保留不同的可能性。
prefixes = new Dictionary<string, KeyValuePair<SearchCriteria, SearchType>> {
{ values },
{ values }
}
建议好吗? :)
答案 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;