2013-12-17 66 views
1

我已經定義的對象爲:如何在C#複製只讀對象並修改副本

readonly List<object> Params; 

我需要存儲在列表中爲整數的值,但所有的鑄造方法我都試過像Convert類,使用(int)明確的類型轉換提供以下錯誤:

Unhandled Exception: System.InvalidCastException

我試圖打印的元素,這讓我的對象的整數值,但複製列表保持readonly屬性,我無法使用在我的價值節目。

+2

你在這個列表中是否有整數值,或者你有保存整數的字符串? –

+0

「Params」的對象類型是什麼?列表中包含什麼 – DGibbs

+0

輸入是什麼?你已經試過的代碼是什麼?讓我們知道更多的信息;) – dasheddot

回答

0

readonly具有所有存儲在列表中的值沒有影響。它僅適用於List對象,但不適用於其內容。所以忘了它,這裏沒有錯。

相反,必須有一個轉換的問題與存儲在Params值的至少一個(順便說一句。:除了明確說)......

您可以使用int.TryParse(...)找出哪個值是。

2

你可以使用Linq要做到這一點,對樣品中加入這個命名空間

using System.Linq; 

,並嘗試使用該Cast<T>方法來轉換,

List<int> ints = Params.Cast<int>(); 

您也可以使用Select方法,如果你需要做更具體的事情,例如:

List<int> ints = Params.Select(x => { 

            // its a scope, and you can do it here... 

            if (something) 
             return (int) x; 
            else if (other condition) 
             return int.Parse(x.ToString()); 

             return x; // other custom conversions... 

            }).ToList(); 
+0

Params.Cast 可能更優雅;-) – dasheddot

+0

'Params.Cast ().ToList()'會更好,它可以快捷方式,如果底層對象實現IEnumerable

+0

@dasheddot不只是更優雅,更可以更多高效。 –

1

如果在列表中的元素都是字符串,使用

int value = int.Parse((string)Params[i]); 

如果元素詮釋的單子都是整數,使用

int value = (int)Params[i];