3 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
在 C# 中是不允許這樣做的,更多細(xì)節(jié)在這里。但是您可以轉(zhuǎn)換為non-generic IEnumerable
,然后在推送到之前將所有內(nèi)容轉(zhuǎn)換為 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貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
首先,嘗試分配到循環(huán)val內(nèi)部是foreach行不通的。您無(wú)法更改正在迭代的集合。
所以你需要建立一個(gè)新的集合。像這樣的工作,看看yield return迭代器中的語(yǔ)句如何讓您構(gòu)建一個(gè)新IEnumerable的葉對(duì)象,并適用于任何級(jí)別的對(duì)象和值類型。
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 關(guān)注
- 217 瀏覽
添加回答
舉報(bào)