7

この C#/WPF コード:

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)」に最適なオーバーロードされたメソッドの一致には、無効な引数が含まれています

それでも、このコード例はherehereなどどこでも見つかります。

大文字と小文字を区別しないキーを持つ Dictionary を定義するにはどうすればよいですか?

4

3 に答える 3

20

を使用しようとしていますがStringComparison、これは列挙型です。代わりに を使用する必要があります。これは、 を実装StringComparer.InvariantCultureIgnoreCaseする を返すプロパティです。その後、等価性をチェックしてハッシュ コードを生成するために使用できる を受け入れるコンストラクター オーバーロードを呼び出すことになります。StringComparerIEqualityComparer<string>Dictionary<,>IEqualityComparer<TKey>

于 2010-03-22T10:33:50.660 に答える
3

StringComparer.InvariantCultureIgnoreCase を渡します。注意 StringCompar erは StringCompar isonではありません。

より一般的には、Dictionary<TKey, TValue>コンストラクターは type の引数を取ることができますIComparer<TKey>。Jon が指摘するように、StringComparison は列挙型です。しかし、 StringComparer は の「定型化された」実装を提供しておりIComparer<string>、必要なのは後者です。

于 2010-03-22T10:33:54.127 に答える
1

これは私のコンピューターで動作します:

Dictionary<string, string> dic = new Dictionary<string, string>( StringComparer.InvariantCultureIgnoreCase ).
于 2010-03-22T10:35:11.517 に答える