我已经定义的对象为:如何在C#复制只读对象并修改副本
readonly List<object> Params;
我需要存储在列表中为整数的值,但所有的铸造方法我都试过像Convert
类,使用(int)
明确的类型转换提供以下错误:
Unhandled Exception: System.InvalidCastException
我试图打印的元素,这让我的对象的整数值,但复制列表保持readonly
属性,我无法使用在我的价值节目。
我已经定义的对象为:如何在C#复制只读对象并修改副本
readonly List<object> Params;
我需要存储在列表中为整数的值,但所有的铸造方法我都试过像Convert
类,使用(int)
明确的类型转换提供以下错误:
Unhandled Exception: System.InvalidCastException
我试图打印的元素,这让我的对象的整数值,但复制列表保持readonly
属性,我无法使用在我的价值节目。
的readonly
具有所有存储在列表中的值没有影响。它仅适用于List
对象,但不适用于其内容。所以忘了它,这里没有错。
相反,必须有一个转换的问题与存储在Params
值的至少一个(顺便说一句。:除了明确说)......
您可以使用int.TryParse(...)
找出哪个值是。
你可以使用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();
Params.Cast
'Params.Cast
@dasheddot不只是更优雅,更可以更多高效。 –
如果在列表中的元素都是字符串,使用
int value = int.Parse((string)Params[i]);
如果元素诠释的单子都是整数,使用
int value = (int)Params[i];
你在这个列表中是否有整数值,或者你有保存整数的字符串? –
“Params”的对象类型是什么?列表中包含什么 – DGibbs
输入是什么?你已经试过的代码是什么?让我们知道更多的信息;) – dasheddot