2010-03-22 9 views
8

Это C#/WPF код:Почему я не могу определить словарь в C#?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace TestDict28342343 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      Dictionary<string, string> variableNamesAndValues = 
       new Dictionary<string, string>(StringComparison.InvariantCultureIgnoreCase); 

     } 
    } 
} 

дает мне ошибку:

Лучший перегруженный метод подходит для «System.Collections.Generic.Dictionary.Dictionary (System.Collections. Generic.IDictionary)» имеет некоторые недопустимые аргументы

Но я нахожу этот пример кода везде, таких как here и here.

Как определить словарь, ключи которого не зависят от регистра?

ответ

20

Вы пытаетесь использовать StringComparison, который представляет собой перечисление. Вместо этого вы должны использовать StringComparer.InvariantCultureIgnoreCase - это свойство, возвращающее StringComparer, которое реализует IEqualityComparer<string>. Затем вы вызовете Dictionary<,> constructor overload accepting an IEqualityComparer<TKey>, который он может использовать для проверки равенства и генерации хэш-кодов.

3

Пропустить StringComparer.InvariantCultureIgnoreCase. Примечание StringCompar er не StringCompar ison.

В общем случае конструктор Dictionary<TKey, TValue> может принимать аргумент типа IComparer<TKey>. Как отмечает Джон, StringComparison - это перечисление. Но StringComparer предоставляет некоторую «консервированную» реализацию IComparer<string>, и это последнее, что вам нужно.

8

Изменить

StringComparison.InvariantCultureIgnoreCase 

в

StringComparer.InvariantCultureIgnoreCase 
1

Это работает на моем компьютере:

Dictionary<string, string> dic = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase).