2014-11-03 64 views
0

我有一個電話對象像這樣:什麼集合允許我通過對象上的參數進行搜索?

public string grade { get; set; } 
public string network { get; set; } 
public decimal price { get; set; } 

我有一個循環,我分析原始數據,並在每次通過創建一個新的電話對象。我現在的任務是定義一個集合來容納這些電話對象。

我不知道我需要什麼類型的集合。我需要能夠在我的代碼中定義gradenetwork並輕鬆獲得價格,以便通用列表不存在問題(我認爲)。我應該使用多維數組嗎?

每個等級只有一個電話&網絡(這是所有數據爲同一電話,只是不同的價格取決於網絡或等級)。

什麼是最簡單的收集我可以用來實現在gradenetwork餵養的目標,並走出價格?

+0

如果您打算將所有三個值一起存儲在一個對象中,那麼它並不重要;只需使用'List'。如果你把'grade'和'network'放到一個對象中,那麼'Dictionary '很有意義。 – BradleyDotNET 2014-11-03 19:23:46

+1

我覺得你在想這個,List看起來很好 – Jonesopolis 2014-11-03 19:24:02

+0

@BradleyDotNET如果你想讓鍵具有值語義,而不是引用類,那麼不要忘記重寫'Equals'和'GetHashCode'。 – 2014-11-03 19:27:46

回答

1

您應該使用打字清單。定義一個類:

public class Phone 
{ 
    public string grade { get; set; } 
    public string network { get; set; } 
    public decimal price { get; set; } 
} 

然後定義列表:

var list = new List<Phone>(); 

編輯:

每請求,這裏是如何進行查詢。

var price = list.Where(p => p.grade = "grade" && p.network == "network").Select(p => p.price).FirstOrDefault(); 
+2

如果您還展示了一個例子,他將如何訪問'grade'和'network'的價格。 – 2014-11-03 19:25:39

+0

@Paul非常感謝你,這是我將它添加到我的代碼中的方式。一個簡短的問題是,文本參數大小寫是否敏感?如果是這樣,可以用某個選項關閉嗎? – Guerrilla 2014-11-04 12:29:32

+0

它們如上所述。要執行不區分大小寫的比較,請執行以下操作:if(phone.Grade.Equals(「foo」,StringComparison.OrdinalIgnoreCase)){}。或者上面的LINQ語句是:list.Where(p => p.grade.Equals(「foo」,StringComparison.OrdinalIgnoreCase))。 – Paul 2014-11-04 13:21:31

1

如果您使用LINQ進行查詢,任何列表都會執行。

List<Phone> list = ... 


string grade = "..."; 
string network = "..."; 

var phone = list.FirstOrDefault(
    p => 
     p.grade == grade && 
     p.network == network); 

if (phone != null) 
{ 
    // found one 
    var price = phone.price; 
1

我認爲你正在過度譴責這件事。 A List<Phone>應該可以正常工作。

var phones = new List<Phone>(); 

既然你說有永遠只能一個價格爲grade每個組合network你可以使用LINQ方法Single

string network = string.Empty; //something useful here 
string grade = string.Empty; 
decimal price = phones.Single(p => p.network == network && p.grade == grade).price; 

如果有一個以上的組合,這將拋出一個錯誤同樣的gradenetwork

+0

'如果存在多於一個的組合,這將引發錯誤,或者在這個組合中沒有找到。另請注意,手機是'List ','Single'將返回一個類型爲'Phone'而不是'decimal'的實體。您需要訪問該對象的價格。 – 2014-11-03 19:31:06

+0

@IlyaIvanov是的,如果沒有'grade'和'network'的組合,這會引發錯誤。如果可能出現這種情況,請使用'SingleOrDefault'。感謝您指出'Single'的返回類型,我忘記了'.price'。 – 2014-11-03 19:36:51

相關問題