如何在 c# 中复制只读对象并修改副本
本文关键字:对象 修改 副本 只读 复制 | 更新日期: 2024-10-29 16:22:32
我有一个对象定义为:
readonly List<object> Params;
我需要将存储在列表中的值作为整数获取,但是我尝试过的所有强制转换方法都像类Convert
显式类型转换,使用(int)
给出以下错误:
我未处理的异常:System.InvalidCastException
尝试打印元素,它给了我对象的整数值,但复制列表会保留 readonly
属性,我无法在我的程序中使用该值。
您可以使用
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();
如果列表中的元素是字符串,请使用
int value = int.Parse((string)Params[i]);
如果列表中的元素是整数,请使用
int value = (int)Params[i];
readonly
对列表中存储的值完全没有影响。它仅适用于List
对象,但不适用于其内容。所以算了,这里没有错。
相反,至少一个存储在Params
中的值必须存在转换问题(顺便说一句:异常清楚地表明)......
您可以使用int.TryParse(...)
来找出它的值。