2012-10-27 65 views
2

對於C#我很新穎,而且練習練習試圖將Y和N的控制檯輸入轉換爲true和false布爾數組(Y = true N = false)。在List.ConvertAll中使用Lambda表達式

enter image description here

我得到的「只分配調用,遞增,遞減,等待新的對象表達式可以用作聲明」的錯誤。有什麼建議麼?

回答

0

嘗試:

bool[] tempArray = Console.ReadLine().ToList().ConvertAll(ch => Char.Equals(ch, 'Y')).ToArray(); 

Lambda表達式不需要在聲明中指定的參數的類型,它們會自動推斷。您還需要將其轉換爲bool s的列表,並將其轉換爲ToArray的數組。

+4

自動推斷的其他東西:泛型類型參數。這裏不需要''或''。 –

+0

是的好點。我編輯瞭解決這些問題的答案。 –

1

這個工程,並且有點簡單。

var array = Console.ReadLine().Select(x => x == 'y'); 

我相信這是因爲你正在使用一個列表和一個數組。這是我嘗試你的方法時得到的錯誤。

+1

不,那將是IEnumerable的''。你也不需要'ToArray '作爲字符串。 –

+0

因此,保持var並添加ToArray()。但是爲什麼還要打擾IEnumerable的99/100倍才能做到這一點呢?我的意思是它畢竟是一個LINQ問題。 –

+0

ToArray的好處

1
bool[] tempArray = Console.ReadLine().Select(ch => ch == 'Y').ToArray(); 
+1

只是好奇,爲什麼一個字節數組? –

+0

@levib也是如此,誤印 –

0

爲了使無差錯:

var bools = Console.ReadLine().Where(x => Char.ToUpperInvariant(x) == 'Y' || Char.ToUpperInvariant(x) == 'N').Select(x => x == 'Y');