Я не уверен, что вы ожидаете от звонка до K[i >> 3]
. Ваше название говорит «конвертировать часть списка», но то, что он делает, просто возвращает один строку из вашего List<string>
.
Далее вы вызываете SelectMany()
на эту строку. Так как string
- это IEnumerable<char>
, вызов SelectMany
пытается вызвать Encoding.Default.GetBytes()
на каждом char
в строке и вернуть полученный byte[]
, возвращенный от каждого вызова, в объединенный IEnumerable<byte>
. Это не удается, потому что Encoding.Default.GetBytes()
ожидает строку параметр, а не char.
Основываясь на вашем названии, я ожидаю, что вы ожидали K[i >> 3]
, чтобы вернуть IEnumerable<string>
, содержащий подмножество вашего оригинала List<string>
. Если бы это было так, ваш код имел бы смысл - SelectMany
передал бы каждую строку в подмножестве GetBytes
, которая вернет byte[]
, который будет объединен с большим IEnumerable<byte>
, содержащим байты для всех строк в подмножестве. Но вам нужно исправить свою основную причину, подмножество-выбор, чтобы это сработало.
Ваш код и ваша ошибка не совпадают. Вы не вызываете 'GetString' вообще в своем примере кода, что заставляет меня думать, что вы на самом деле не отправляете код, который вы используете. –
Кроме того, ваш пример слишком сложный и скрывает настоящую проблему. Ваш вызов 'K [i >> 3]' возвращает строку, поэтому вы можете упростить ее, просто вызвав 'myString.SelectMany (s => ,,,)', что может помочь вам увидеть проблему самостоятельно. –
Вам нужен двумерный массив байтов [,], и у вас есть только одномерный массив. Каждая строка создаст байт [], а объект List <> содержит несколько строк. – jdweng