假设我有一组对象,其中一些是数组。
我想连接所有值来打印它们,但我不知道数组中元素的类型。
foreach(var item in myList)
{
var val = item.Property;
if (val.GetType().IsArray)
{
var array = val as IEnumerable<object>;
val = string.Join(",", array);
}
DoSomething(val);
}
如果 val 包含 a string[]
,则此代码片段将起作用,也适用于 a myClass[]
。
但是如果它包含一个int[]
or double[]
,则数组将为空,这意味着动态转换失败。
如果 int 或 double 是从 System.TypeValue 继承的,而 System.TypeValue 是从 object 继承的,为什么此代码片段不起作用?
我怎么能做到这一点?
编辑:将代码片段更改为更明确,并避免出现错误的变量使用,因为我错误地简化了我的代码。
在 C# 中是不允许这样做的,更多细节在这里。但是您可以转换为non-generic IEnumerable
,然后在推送到之前将所有内容转换为 object string.Join()
:
foreach(var val in myList)
{
if (val.GetType().IsArray)
{
var array = (IEnumerable)val;
// It's not allowed to set val variable, but I assume it's just an example
val = string.Join(",", array.Cast<object>());
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句