2015-11-05 3 views
1

Я только что прочитал этот вопрос: Convert string[] to int[] in one line of code using LINQC# - .Select (int.Parse), составитель ошибка cs0411

Был массив строк:

var arr = new string[] { "1", "2", "3", "4" }; 

И один из принятых ответов был:

int[] myInts = arr.Select(int.Parse).ToArray(); 

Я пробовал сам и получил ошибку cs04011 компилятора:

string str = "4 8 15 16 23 42"; 
int[] intArray = str.Split(' ').Select(int.Parse).ToArray(); 

Вот страница, описывающая эту ошибку компилятора: MSDN

Если бы я сделать это таким образом, он отлично работает:

int[] intArray = str.Split(' ').Select(p=>int.Parse(p)).ToArray(); 

Я задаюсь вопросом, почему же принял asnwer за предыдущий вопрос отлично работает, и я получаю сообщение об ошибке?

Я предполагаю, что моя визуальная студия (2008 express, target framework = 3.5) не годится, но мне не удалось найти никаких доказательств.

Заранее благодарен!

ответ

10

Короткий ответ: вывод типа C# и поддержка конверсий групп методов со временем улучшились. Вы все еще используете компилятор C# 3 (это то, что поставляется в VS 2008). Точные детали сложны, и я не могу точно помнить, что изменилось в спецификации - вывод типа является одним из самых причудливых бит спецификации, и он не совсем описывает предполагаемое поведение в любом случае, насколько я могу осознанный.

Если вы используете более свежий компилятор, следуя более поздним языковым правилам, все будет хорошо. Это не зависит от версии рамки, на которую вы нацеливаете - здесь важна только версия для компилятора/языка.

я настоятельно рекомендую модернизации прямо в Visual Studio 2015 - C# 6 имеет некоторые прекрасные возможности для удаления хлама из вашего кода ...

+1

Большое спасибо, @ Джон тарелочкам! Постскриптум Я читаю твою книгу прямо сейчас, это потрясающе! :) –