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

本文关键字:对象 修改 副本 只读 复制 | 更新日期: 2024-10-29 16:22:32

我有一个对象定义为:

readonly List<object> Params;

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

未处理的异常:System.InvalidCastException

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

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

您可以使用

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(...)来找出它的值。