2012-01-27 39 views
1

我有一个HashSet<string>使用StringComparer.CurrentCultureIgnoreCase实例化,我正在广泛使用.Contains(字符串输入)来检查用户输入。如果用户在错误的情况下输入一个值,.Contains = true,这是正确的,但我还需要更正大小写;如果例如用户请求myvalueMyValue在哈希集中,那么返回MyValue以便用户输入经过大小写更正的最有效方法是什么?如何从散列集<string>获取正确的值?

这里是我的意思是一个粗略的代码示例:

static HashSet<string> testHS = new HashSet<string>(StringComparer.CurrentCulture); 
    static bool InputExists(string input, out string correctedCaseString) 
    { 
     correctedCaseString = input; 
     if (testHS.Contains(input)) 
     { 
      // correctedCaseString = some query result of the cased testHS value? 
      return true; 
     } 
     return false; 
    } 

回答

3

你可以使用一个字典,而不是一个HashSet的。将字符串映射到自身并使用不区分大小写的相等比较器(http://msdn.microsoft.com/zh-cn/library/ms132072.aspx)。您的代码然后变成类似于:

static Dictionary<string, string> testD = new Dictionary<string, string>(StringComparer.CurrentCulture); 
static bool InputExists(string input, out string correctedCaseString) 
{ 
    correctedCaseString = input; 
    if (testD.ContainsKey(input)) 
    { 
     correctedCaseString = testD[input]; 
     return true; 
    } 
    return false; 
} 
+1

您击败了我。 – Greg 2012-01-27 17:09:54

+0

优雅,永远不会想到这一点。但有没有办法做到这一点,而不必改变我的对象?否则,把Linq方法放在“最好的方式”之下(也许更多/太昂贵),使用哈希集来做?编辑:似乎其他答案已经vamoosed ... – downwitch 2012-01-27 17:18:11