2016-04-27 66 views
0

我有以下代碼。我想將for循環替換爲lambda或LINQ表達式以返回我的字符串。從基於測試字符串的2D字符串數組返回字符串的Lambda表達式

string[,] testval = new string[3,2] 

testval[0, 0] = "0" 
testval[0, 1] = "string A" 
testval[1, 0] = "5" 
testval[1, 1] = "string B" 
testval[2, 0] = "13" 
testval[2, 1] = "string C" 

string teststring = "13" 

for (int i=0; i<=testval.GetUpperBound(0);i++) 
{ 
    if (testval[i,0] == teststring) { return testval[i,1]; } 
} 
return null; 

我是lambda和LINQ表達式的新手。有人能幫助我嗎?

+1

而不是使用二維數組和lambda表達式,我建議使用'Dictionary '代替。 – dharms

+0

你的意思是「lambda」還是你的意思是「LINQ」?因爲我不確定lambda會在這裏得到什麼,但是LINQ表達式可能是一種消除顯式循環的替代方法。 – davidbak

+0

@davidbak謝謝。兩者都可以,是的。我只是想讓它比for循環更簡單。 – ib11

回答

2

您可以使用Enumerable.Range()產生要遍歷整數序列,然後構建LINQ查詢過是:

var result = Enumerable. 
       .Range(0, testval.GetUpperBound(0)+1) 
       .Where(i => testval[i,0] == teststring) 
       .Select(i => testval[i,1]) 
       .FirstOrDefault(); 

對於使用查詢語法,或其他方法,看看this excellent answer

+0

太好了,謝謝。所以基本上你無論如何都需要循環它們。我想知道是否有另外一種方法可以不循環。 – ib11