第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在不知道 C# 中的底層類型的情況下遍歷數(shù)組

如何在不知道 C# 中的底層類型的情況下遍歷數(shù)組

C#
慕田峪9158850 2021-06-29 13:57:53
假設(shè)我有一組對(duì)象,其中一些是數(shù)組。我想連接所有值來(lái)打印它們,但我不知道數(shù)組中元素的類型。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[]。但是如果它包含一個(gè)int[]or double[],則數(shù)組將為空,這意味著動(dòng)態(tài)轉(zhuǎn)換失敗。如果 int 或 double 是從 System.TypeValue 繼承的,而 System.TypeValue 是從 object 繼承的,為什么此代碼片段不起作用?我怎么能做到這一點(diǎn)?編輯:將代碼片段更改為更明確,并避免出現(xiàn)錯(cuò)誤的變量使用,因?yàn)槲义e(cuò)誤地簡(jiǎn)化了我的代碼。
查看完整描述

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>());

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-07-03
?
溫溫醬

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;

            }

        }

    }


查看完整回答
反對(duì) 回復(fù) 2021-07-03
  • 3 回答
  • 0 關(guān)注
  • 217 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)