Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#中复制只读对象并修改副本_C# - Fatal编程技术网

如何在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];