![](/img/trans.png)
[英]looping through an object passed in via JQUERY as an array and using c# webmethod to get data out
[英]C# - Looping through object parameter that was passed from new thread
我正在嘗試啟動一個新線程並將參數傳遞給我的一個方法。 參數是List<string>
,包含大約20個字符串項。 我可以使用以下代碼傳遞數組:
List<string> strList = new List<string>();
Thread newThread = new Thread(new ParameterizedThreadStart(Class.Method));
newThread.Start(strList);
我的方法定義為:
public void Method(object strList)
{
//code
}
那么我的問題是如何通過此對象中包含的每個字符串運行foreach循環?
三種選擇:
按原樣使用ParameterizedThreadStart
,並在方法中強制轉換:
public void Method(object strList) { List<string> list = (List<string>) strList; // Use list here }
使用匿名函數以強類型方式捕獲變量,並從匿名函數調用強類型方法:
List<string> strList = new List<string>(); ThreadStart action = () => Method(strList); new Thread(action).Start(); ... public void Method(List<string> list) { // Use list here }
使用更高級別的抽象,例如任務並行庫或並行LINQ; 取決於你正在做什么,這可能會使事情變得更簡單。
如果你想開始一個新的線程,我會使用第二種方法-放置“骯臟”本地化開始一個新的線程的方法。 任何這些方法都可行。 請注意,如果您有多條信息傳遞給新線程,則第二種方法最終比創建Tuple
並解Tuple
更簡單。
您必須將object
類型轉換為列表類型,例如:
public void Method(object strList)
{
var list = (List<string>)strList;
foreach ( var s in list )
{
// Do something.
}
}
您必須將對象強制轉換為實際類型,然后您才能使用foreach。
使用(List<string>
)轉換對象,然后使用迭代
for (int i = 0; i < list.Count; i++) // Loop through List with for
{
Console.WriteLine(list[i]);
}
您必須將其強制轉換為字符串列表,如下所示:
public void Method(object strList)
{
List<string> internalStringList = strList as List<string>;
//this is a save cast the "internalStringList" variable will
//be null if the cast fails.
}
你也可以這樣做:
List<string> internalStringList = (List<string>) strList;
但如果strList不是List,則可能拋出InvalidCastException
為了安全起見:
public void Method(object strList)
{
var list = strList as List<string>;
if (list != null)
{
foreach(var item in list )
{
//code here
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.