C #: реализует ли SortedList <TKey, TValue> IReadOnlyDictionary <TKey, TValue>? - PullRequest
0 голосов
/ 12 мая 2018

Согласно документации SortedList и SortedDictionary они оба реализуют IReadOnlyCollection<KeyValuePair<TKey,TValue>> и IReadOnlyDictionary<TKey,TValue>.Версии doc для .net 4.5.2 говорят то же самое, поэтому мой проект, нацеленный на C # 6.0 (то есть .NET 4.6, как говорится в Википедии), должен быть охвачен этим.

Согласно компилятору из VS 2015, нет.
Я не могу передать SortedDictionary<int, string> этой функции:

private static void funcIROCollKvp1 (IReadOnlyCollection<KeyValuePair<int, string>> i_rocollkvp)

Какой из них неправильный?

Вот полный код:

private static void funcIROCollKvp1 (IReadOnlyCollection<KeyValuePair<int, string>> i_rocollkvp)
{
}

private static void Main ()
{
  SortedList<int, string> listkvp = new SortedList<int, string> ();
  SortedDictionary<int, string> dict = new SortedDictionary<int, string> ();

  funcIROCollKvp1 (listkvp);
  funcIROCollKvp1 (dict);
}

1> D: \ Проекты Visual Studio \ testTKS_vs2015 \ test03 \ Program.cs (18,24,18,31): ошибка CS1503: Аргумент 1: невозможно преобразовать из 'System.Collections.Generic.SortedList' в 'System.Collections.Generic.IReadOnlyCollection> '
1> D: \ Проекты Visual Studio \ testTKS_vs2015 \ test03 \ Program.cs (19,24,19,28): ошибка CS1503: Аргумент 1: невозможно преобразовать из' System.Collections.Generic.SortedDictionary 'to' System.Collections.Generic.IReadOnlyCollection> '

1 Ответ

0 голосов
/ 12 мая 2018

Это не говорит, что вы не можете их пройти, просто говорит, что не знает как. Вы можете вручную привести объекты к IReadOnlyCollection.

        funcIROCollKvp1((IReadOnlyCollection < KeyValuePair<int, string> > )listkvp);
        funcIROCollKvp1((IReadOnlyCollection < KeyValuePair<int, string> > )dict);
...