亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用表達式作為字符串生成 Action<T>

使用表達式作為字符串生成 Action<T>

C#
九州編程 2021-11-21 14:59:10
我試圖弄清楚如何從代表動作“語句”行的字符串集合中生成一個動作......using System.Linq.Dynamic;Action<T> BuildAction<T>(T sourceObject, T destinationObject) where T : BaseThing{    var source = Expression.Parameter(sourceObject.GetType(), "source");    var destination = Expression.Parameter(destinationObject.GetType(), "destination");    var statements = new[] {        "destination.Foo = source.Foo",        "destination.X = source.Y"    };    var parsedStatements = statements.Select(s => DynamicExpression.Parse(new[] { destination, source }, typeof(void), s);    return Expression.Lambda<Action<T>>(Expression.Block(parsedStatements));}這個想法是最終得到類似......Action<T> result = (destination, source) => {     destination.Foo = source.Foo;     destination.X = source.Y;};我的另一個問題是源和目標不必是相同的類型,它們只共享一個基類型,所以在這個例子中,目標可能沒有 Y 屬性,源可能沒有 X 屬性(因此映射)。
查看完整描述

1 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

所以事實證明,這個問題的答案并不像我希望的那么簡單。簡而言之......我需要編寫一個表達式解析器。

對于最簡單的情況(問題中提出的情況),我可以在我的部分解決方案中使用代碼,但對于完整的解決方案,我將不得不構建一個表達式解析器,該解析器可以處理放入字符串中的更多復雜性.

就我而言,使用字典或類似方法只能解決一部分潛在問題,我不能使用反射,因為我的情況需要“大規模重用已編譯的操作”(我在問題中略有提及)。

我可以參考一系列問題的答案來解決這個問題的各個部分,但我設法找到了一個更“完整”的起點,以實現我在其他地方嘗試實現的目標......

https://archive.codeplex.com/?p=simproexpr

...這個例子不僅可以解析表達式,還可以解析表達式塊。

使用那個/類似的東西,我將沿著這些方向構建一些東西來解決我的問題,我希望這可以幫助其他人。


查看完整回答
反對 回復 2021-11-21
  • 1 回答
  • 0 關注
  • 210 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號