繁体   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