我的應用程序頻繁迭代鋸齒狀數組。而不是顯式嵌套循環到處,我試圖實現像功能的foreach,我可以通過lambda。如何推出我自己的鐵血沙龍?
我的最新嘗試看起來是這樣的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JaggedTest
{
static class Global
{
// Does not work
public static void ForEachJagged<T>(Array A, System.Linq.Expressions.Expression<Action<T>> F)
{
foreach (var Item in A)
{
if (Item is Array)
{
ForEachJagged<T>((Array)Item, F);
}
else
{
System.Linq.Expressions.InvocationExpression Invo =
System.Linq.Expressions.Expression.Invoke(F,
System.Linq.Expressions.Expression.Constant(Item));
Console.WriteLine(Invo.ToString());
// How to execute "Invo" ?
}
}
}
}
class Program
{
static void Main(string[] args)
{
int[][] Foo = new int[3][] {
new int[] {1}
,new int[] {2,3,4,5,6}
,new int[] {7,8,9}
};
Global.ForEachJagged<int>(Foo, X => Console.Write(X.ToString() + " "));
}
}
}
這個程序產生的lambda表達式預期「的ToString」調試輸出,但我堅持努力去實際執行這個表達式。執行作爲函數參數傳遞的lambda表達式的正確方法是什麼?
- 編輯 -
工作鋸齒狀的foreach基於斯拉瓦Utesinov的反饋:
public static void ForEachJagged<T>(Array A, Action<T> F)
{
foreach (var Item in A)
{
if (Item is Array)
{
ForEachJagged<T>((Array)Item, F);
}
else
{
F((T)Item);
}
}
}
什麼是'表達>'的目的。爲什麼不接受一個'動作'?使用表達式樹通常只需要將lambda「傳輸」到其他層,比如希望C#中的LINQ'Select'作爲SQL'SELECT'在數據庫中執行時。 –
@馬丁,沒有目的。我是C#的新手,並且出軌了。 – srking