[英]How to get a string name to resolve to an object (i.e. in the sense of what it is)
[英]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.