2013-12-17 35 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];