如何在c#中复制只读对象并修改副本
我有一个对象定义为:如何在c#中复制只读对象并修改副本,c#,C#,我有一个对象定义为: readonly List<object> Params; 只读列表参数; 我需要将列表中存储的值作为整数获取,但我尝试过的所有转换方法,如Convertclass,使用(int)进行显式类型转换,都会出现以下错误: 未处理的异常:System.InvalidCastException 我试图打印元素,它给了我对象的整数值,但复制列表会保留只读属性,我无法在程序中使用该值。您可以使用Linq来执行此操作,对于示例,添加此名称空间 using System.L
readonly List<object> Params;
只读列表参数;
我需要将列表中存储的值作为整数获取,但我尝试过的所有转换方法,如Convert
class,使用(int)
进行显式类型转换,都会出现以下错误:
未处理的异常:System.InvalidCastException
我试图打印元素,它给了我对象的整数值,但复制列表会保留
只读属性,我无法在程序中使用该值。您可以使用Linq
来执行此操作,对于示例,添加此名称空间
using System.Linq;
并尝试使用Cast
方法进行转换
List<int> ints = Params.Cast<int>();
如果列表中的元素是字符串,请使用
int value = int.Parse((string)Params[i]);
如果列表中的元素为int,则使用
int value = (int)Params[i];
readonly
对列表中存储的值没有任何影响。它仅适用于列表
对象,而不适用于其内容。所以算了吧,这里没什么错
相反,存储在Params
中的至少一个值必须存在转换问题(顺便说一句:例外情况清楚地表明)
您可以使用查找它是哪个值。此列表中是否有整数值,或者是否有包含整数的字符串?参数的对象类型是什么?列表中包含什么?输入是什么?您已经尝试过的代码是什么?让我们了解更多信息;)我不认为只读
做你认为它做的事readonly
ONLY意味着您不能设置参数的值(除了从构造函数或字段初始值设定项中,然后只能设置一次)。它不会阻止您从列表中添加或删除值。Params.Cast可能更优雅;-)<代码>参数.Cast().ToList()更好,如果底层对象实现IEnumerable@dasheddot“不仅仅是更优雅,可以更高效。”BobVale肯定,但QA似乎不想进行微优化。但你当然是对的——反正我比你快了3秒:)
int value = (int)Params[i];