#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. Спасибо. Я как раз шел по этому пути. Не уверен, почему мне не хватало необходимости вызывать базу с ее аргументом конструктора.