![](/img/trans.png)
[英]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.