3 回答
TA贡献1883条经验 获得超3个赞
在 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>());
}
}
TA贡献1752条经验 获得超4个赞
首先,尝试分配到循环val内部是foreach行不通的。您无法更改正在迭代的集合。
所以你需要建立一个新的集合。像这样的工作,看看yield return迭代器中的语句如何让您构建一个新IEnumerable的叶对象,并适用于任何级别的对象和值类型。
class Program
{
static void Main(string[] args)
{
var myWackyList = new object[] {
new[]{1d, 2d},
3d,
new[]{4d, 5d},
new []
{
new[]
{
6d
}
},
"7",
new[]{ "8", "9"}
};
Console.WriteLine( string.Join(", ", Flatten( myWackyList )));
}
static IEnumerable<object> Flatten(IEnumerable enumerable)
{
foreach (var val in enumerable)
{
if ( val.GetType().IsArray )
foreach ( var flattenedVal in Flatten( val as IEnumerable ) )
yield return flattenedVal;
else
yield return val;
}
}
}
- 3 回答
- 0 关注
- 187 浏览
添加回答
举报