簡體   English   中英

如何獲取字符串數組值,即作為參數傳遞給對象數組?

[英]How to get string array values, i.e. passed as a parameter in an object array?

我試圖在對象數組中傳遞字符串數組和其他參數,另一方面,我想檢索此參數值並顯示它們,但是我無法檢索字符串數組值,而是顯示字符串的類型數組。

static void Main(string[] args)
{
    string[] test = {"t1","t2","t3"};

    TestArray(1,test,"Hello");
}

static void TestArray(params object[] array)
{  
    foreach(var value in array)
    {
        Console.WriteLine(value);                    
    }
    Console.ReadLine();
}

您正在將所有值打印為字符串。 Array.ToString()將返回$elementType[] ,因此在您的情況下為System.String[]

您將需要測試value是否是IEnumerable ,如果是,則對其進行迭代並遞歸打印其成員的值。

static void TestArray(params object[] array)
{  
    PrintValue(value);       
}

public void PrintValue(object value)
{
    var enumerable = value as IEnumerable;
    if (enumerable != null)
    {
        foreach (var subvalue in enumerable)
        {
            PrintValue(subvalue);
        }
    }
    else
    {
        Console.WriteLine(value.ToString());
    }
}

請注意,這仍然無法打印復雜類型,在這種情況下,將僅再次輸出其類型名稱。

嘗試這個:

    static void Main(string[] args)
    {
        string[] test = { "t1", "t2", "t3" };

        TestArray(1, test, "Hello");
    }

    static void TestArray(params object[] array)
    {
        foreach (var value in array)
        {
            if (value is IEnumerable<object>)
                foreach (var element in value as IEnumerable<object>)
                    Console.WriteLine(element);
            else
                Console.WriteLine(value);
        }
        Console.ReadLine();
    }

您必須檢查該值是否為數組並對其進行循環:

public static void DisplayParams(params object[] parameters)
{
    foreach(var param in parameters)
    {
        var arr = param as string[];
        if( arr  != null)
        {
            foreach(var value in arr)
            {
                Console.WriteLine( value );
            }
        }
        else
        { 
            Console.WriteLine( param );
        }
    }
}

這部分:

var arr = p as string[];
if( arr  != null)

將檢查其是否為數組,如果為數組則將遍歷它。

當然,當您插入其他類型時,這將不起作用,因此進行一些驗證是明智的

要考慮的一種選擇:

    static void Main(string[] args)
    {
        string[] test = { "t1", "t2", "t3" };

        List<object> combined = new List<object> {1};
        combined.AddRange(test);
        combined.Add("Hello");

        TestArray(combined.ToArray());
    }

    static void TestArray(params object[] array)
    {
        foreach (var value in array)
        {
            Console.WriteLine(value);
        }
        Console.ReadLine();
    }

簡而言之,您可以將所有值合並到單個數組中,然后再將該數組傳遞給方法。

如果您走了這條路線,請考慮刪除params關鍵字-這樣一來,實際上就不可能有人用您原來的方式來稱呼它。 它迫使他們考慮如何處理IEnumerables。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM