2012-11-05 40 views

回答

35

首先,Single拋出一個異常,如果有不止一個滿足條件的元素。其次,您的標準只應檢查Correct屬性是否爲true。現在,你正在檢查是否a等於a.Correct(它甚至不會編譯)。

應使用First(如果不存在這樣的元件,其將拋出),或FirstOrDefault(將返回null用於參考類型,如果沒有這樣的元素):

// this will return the first correct answer, 
// or throw an exception if there are no correct answers 
var correct = answers.First(a => a.Correct); 

// this will return the first correct answer, 
// or null if there are no correct answers 
var correct = answers.FirstOrDefault(a => a.Correct); 

// this will return a list containing all answers which are correct, 
// or an empty list if there are no correct answers 
var allCorrect = answers.Where(a => a.Correct).ToList(); 
+1

感謝您的解釋 –

2

如果a.Correct是一個bool標誌爲正確的答案,然後你需要。

Answer answer = Answers.Single(a => a.Correct); 
10

我假設您因爲Single而收到異常。您的列表可能有多個標記爲正確的答案,這就是爲什麼Single會拋出異常使用FirstFirstOrDefault();

Answer answer = Answers.FirstOrDefault(a => a.Correct); 

此外,如果你想獲得的所有項目的列表標記爲正確的,你可以嘗試:

List<Answer> correctedAnswers = Answers.Where(a => a.Correct).ToList(); 

如果你期望的結果是Single,那麼你在查詢中正在做的錯誤是比較的具有bool值的項目。您的比較

a == a.Correct 

在聲明中是錯誤的。 你的單號查詢應該是:

Answer answer = Answers.Single(a => a.Correct == true); 

或簡稱爲:

Answer answer = Answers.Single(a => a.Correct); 
1

我認爲你是在找這個?

var correctAnswer = Answers.First(a => a.Correct); 

您可以通過鍵入使用單:

var correctAnswer = Answers.Single(a => a.Correct); 
1

當然!

使用FirstOrDefault()選擇哪個條件一致的第一個對象:

Answer answer = Answers.FirstOrDefault(a => a.Correct); 

否則使用Where()選擇列表的一個子集:

var answers = Answers.Where(a => a.Correct); 
4

你的表情是永遠不會來評價。

您正在比較aa的物業。

a是答案類型。 a.Correct,我猜是布爾值。

朗形式: -

Answer = answer.SingleOrDefault(a => a.Correct == true); 

縮寫: -

Answer = answer.SingleOrDefault(a => a.Correct); 
0

幾件事情要解決這裏:

  1. 在類的聲明沒有括號
  2. 做「正確的「作爲公衆的財產
  3. 然後再做選擇

您的代碼將是這個樣子

List<Answer> answers = new List<Answer>(); 
/* test 
answers.Add(new Answer() { correct = false }); 
answers.Add(new Answer() { correct = true }); 
answers.Add(new Answer() { correct = false }); 
*/ 
Answer answer = answers.Single(a => a.correct == true); 

和類

class Answer 
{ 
    public bool correct; 
} 
0
Answers = Answers.GroupBy(a => a.id).Select(x => x.First()); 

這將通過電子郵件選擇每個唯一的對象

相關問題