如何在c#中复制只读对象并修改副本

时间:2013-12-17 10:51:15

标签: c#

我有一个对象定义为:

readonly List<object> Params;

我需要将列表中存储的值作为整数获取,但我尝试过的所有类似Convert类的转换方法,使用(int)进行显式类型转换都会出现以下错误:

  

未处理的异常:System.InvalidCastException

我尝试打印元素,它给了我对象的整数值,但复制列表会保留readonly属性,我无法在程序中使用该值。

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

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

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

如果列表中的元素是整数,请使用

int value = (int)Params[i];

答案 2 :(得分:0)

readonly对列表中存储的值完全没有影响。它仅适用于List对象,但不适用于其内容。所以忘记它,没有错。

相反,必须存在一个转换问题,其中至少有一个值存储在Params中(顺便说一下:例外清楚地说明了这一点)......

您可以使用int.TryParse(...)找出它的值。