2015-11-05 125 views
1

我剛讀了這個問題: Convert string[] to int[] in one line of code using LINQC# - 。選擇(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

非常感謝你,@喬恩飛碟雙向!附:我正在讀你的書,這真棒! :) –