Преобразовать ‘System.Коллекции.Общий.IEnumerable’ в ‘строка[]

#c#

#c#

Вопрос:

У меня возникли проблемы с преобразованием фрагмента кода для работы с .NET3.5.

 static Dictionary<string, object> dictionary = new Dictionary<string, object> 
{
    {"key","value"},
    {"key2","value2"},
};

public static string Process(String _string)
{
    var levels = new Dictionary<string, object>
    {
        { "", "" },
        { "-", "Light" },
        { " ", "Heavy" }
    };
    var search = string.Join("and ", from l in levels.Keys
                               from w in dictionary.Keys
                               join m in _string.Split() on string.Concat(l, w) equals m
                               select string.Concat(levels[l], dictionary[w]));

    return search;
}
  

При попытке компиляции я получаю две ошибки…

Аргумент 2: невозможно преобразовать из ‘System.Коллекции.Общий.IEnumerable’ в ‘строка[]’

и

Наилучший перегруженный метод соответствует ‘string.Соединение (строка, строка[])’ имеет некоторые недопустимые аргументы

Я думал о добавлении.toArray(), но я не знал, где.

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

1. Как насчет в самом конце, после выбора?

2. @BradleyDotNET, нет … к сожалению, все те же ошибки.

Ответ №1:

Используйте ToArray так:

 var search = string.Join("and ", (from l in levels.Keys
                           from w in dictionary.Keys
                           join m in _string.Split() on string.Concat(l, w) equals m
                           select string.Concat(levels[l], dictionary[w])).ToArray());
  

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

1. Согласен, но также это было бы намного чище, если бы оператор linq был назначен его собственной переменной.

Ответ №2:

Заключите ваш запрос LINQ (выберите из … ) в круглые скобки и вызовите .toArray() на нем.