Конструктор словаря WCF CollectionDataContract

#c# #dictionary #wcf #constructor #case-insensitive

#c# #словарь #wcf #конструктор #без учета регистра

Вопрос:

Я использую WCF CollectionDataContract для передачи данных с помощью a Dictionary , и он работает очень хорошо.

 [CollectionDataContract]
public class MyDataDictionary : Dictionary<string, MyItemValue> { }

[DataContract]
public class MyItemValue
{
    [DataMember] public int ID { get; set; }           
    [DataMember] public string Name { get; set; }
    // ...
    public IP21ItemValue() {
        ID = -1;
        Name = string.Empty;
        // ...
    }
}
 

Я хочу улучшить свой словарь, чтобы он не учитывал регистр, и я пробовал множество подобных вещей:

 // Attempt to put the argument on the declaration.
[CollectionDataContract]
public class MyDataDictionary : Dictionary<string, MyItemValue>(StringComparer.InvariantCultureIgnoreCase) { }

// Attempt to instantiate it within the constructor...
[CollectionDataContract]
public class MyDataDictionary : Dictionary<string, MyItemValue> {
    public MyDataDictionary() {
        this = new Dictionary<string, MyItemValue>(StringComparer.InvariantCultureIgnoreCase);
    }
}
 

Но, похоже, я ничего не могу заставить работать. Мне бы очень хотелось избежать переноса всего этого в класс, где словарь является членом данных. Есть ли синтаксис, который это сделает?

Ответ №1:

Вызовите конструктор базового класса, например:

 public class MyDataDictionary : Dictionary<string, MyItemValue> {
    public MyDataDictionary() 
        :base(StringComparer.InvariantCultureIgnoreCase)
    {
    }
}
 

Комментарии:

1. Спасибо. Я как раз шел по этому пути. Не уверен, почему мне не хватало необходимости вызывать базу с ее аргументом конструктора.