2016-11-05 51 views
1

我有以下List<KeyValue<string, int>>低於我在我的應用程序的一個View使用。它的工作原理,但我試圖擴展它,如果可能,通過增加一個額外的參數/值KeyValue對。爲KeyValue對添加額外的值/參數

每一對都有一個特定的顏色,我想傳遞給內聯的css顏色屬性。我希望能夠做這樣的事情:

@foreach (var item in Model) 
{ 
    var result = MyClass.GetOrder(item); 
    <h2>@item.Date.Substring(0,4)</h2> 
    <p style="color:@result[0].Value3">@result[0].Key , @result[0].Value</p> 
    <p style="color:@result[0].Value3">@result[1].Key , @result[1].Value</p> 
    <p style="color:@result[0].Value3">@result[2].Key , @result[2].Value</p> 
    <p style="color:@result[0].Value3">@result[3].Key , @result[3].Value</p>     
} 

靜態方法

public static List<KeyValuePair<string, int>> GetOrder(MyClass myclass) 
{ 
    var NameVal = new List<KeyValuePair<string, int>>() 
    { 
     new KeyValuePair<string, int>(myclass.Name1, Convert.ToInt32(myclass.Val1)), 
     new KeyValuePair<string, int>(myclass.Name2, Convert.ToInt32(myclass.Val2)), 
     new KeyValuePair<string, int>(myclass.Name3, Convert.ToInt32(myclass.Val3)), 
     new KeyValuePair<string, int>(myclass.Name4, Convert.ToInt32(myclass.Val4)) 
    }; 
    var result = NameVal.OrderByDescending(key => key.Value); 
    return result.ToList(); 
} 
+0

您使用KeyValuePair列表的任何特定原因? – Abion47

+0

沒有理由........ – hello

+0

您無法將第三個值添加到「KeyValuePair」。你會發現這很容易,你只需使用包含你想要的3個屬性的視圖模型,並將該模型的集合傳遞給視圖 –

回答

0

你應該使用結構/類,然後過去那種類/結構的IEnumerable的到您的視圖。此外,僅供將來參考,List<KeyValuePair>dictionary相同。

更新:在功能上,兩者實際上是不一樣的,但是字典更適合OP的嘗試完成。

+0

不完全。一個'List'按順序存儲它的數據並通過'int'索引檢索它的值,而一個'Dictionary'將它的數據存儲在一個散列表中通過一個指定類型的鍵來檢索它的值。 – Abion47

+0

@ Abion47是的,你100%正確!我的選擇不好。 – Bryan

2

只需在數據結構中包裝所需的值,然後將其用作KeyValuePair的「Value」部分的類型。

public class Data 
{ 
    public int IntValue; 
    public string StringValue; 
    public bool BoolValue; 
} 

並實施這樣的:

var list = new List<KeyValue<string, Data>>(); 

儘管坦率地說,除非你有特殊原因需要通過int索引來訪問對,我會強烈建議只使用一個字典。

var dict = new Dictionary<string, Data>(); 
相關問題