2009-11-24 116 views
0

我正在嘗試將匹配返回到包含在列表中的Foreach語句。 我有一個類有一個字符串列表,我用它作爲一個軌道集合。返回List <>類型的屬性

我試圖執行一個檢查,看看我傳入的給定音軌是否與存儲在對象(CD.cs)中的任何音軌匹配,如果是這樣,則返回整個CD的詳細信息。

我不確定如何如此,不幸的是,我沒有像我應該做的那樣使用列表。

這裏的軌道特性的一個片段:(虛擬因爲我重寫它在另一個類)

public virtual List<string> Track 
    { 
     get 
     { 
      return _track; 
     } 
     set 
     { 
      value = _track; 
     } 
    } 

這裏是我想要使用返回匹配的方法,很容易看到我想我錯了。 :

public CD FindTrackInCD(string track) 
{ 
     foreach (CD testCD in _cdCollection) 
     { 
      **//If given track matches any tracks in the list 
      if (testCD.Track == track) 
      { 
       //Return the matching CD 
       return trackInCD; 
      }** 
     } 

     throw new ArgumentException("No matches found"); 
} 

的方法我已經大膽的問題區域,我的編譯器顯示我這樣的警告:

Operator '==' cannot be applied to operands of type 'System.Collections.Generic.List<string>' and 'string' 

任何人都可以闡明如何解決這一問題的一些輕?

謝謝!

+1

我不知道,如果它只是一個錯字,但你有另外一個問題是,您的跟蹤二傳手是落後的 - 它應該設置'_track = value'不'價值= _track' – Aaron

+0

這很奇怪,因爲我沒有注意到它,因爲它似乎仍然工作,我不能相信我已經做到了誠實(太多的深夜),但我會修復它,以防萬一,謝謝=] –

+0

作爲一個方面說明,通常不建議具有集合類型的可設置屬性。我們的想法是,這樣的集合應該僅由通過屬性公開它們的對象來擁有 - 所以它在其構造函數中創建一個實例,然後同一個實例總是由getter返回。客戶可合理地期望從此類財產獲得對收集的引用,並假定它將始終引用與該對象相關的「實時」收藏。 –

回答

2

你應該這樣做:

foreach (CD testCD in _cdCollection) 
    { 
     if (testCD.Track.Contains(track)) 
     { 
      //Return the matching CD 
      return testCD; 
     } 
    } 
+0

Thankyou的代碼片段,推動我在正確的方向。 它編譯得很好,我馬上開始測試。 –

1

將它重命名爲Tracks然後您將使用它testCD.Tracks.Contains(track)。正如你的錯誤所言,你現在正在比較一個字符串和一個列表。

+0

Thankyou的建議=] –

相關問題