我需要生成表達式樹,而不是檢查兩個對象(參數)是否相等。我知道這些對象將具有屬性,所以我必須比較它們的值,如何做到這一點? 所以我有類似obj1
,obj2
和我需要檢查的屬性名稱的字符串數組。 以下是我看到這一點:表達式樹,對象比較器
var leftObject = E.Parameter(typeof (object), "leftObject");
var rightObject = E.Parameter(typeof (object), "rightObject");
var properties = E.Parameter(typeof (string[]), "properties");
var i = E.Parameter(typeof(int), "i");
var equal = E.Parameter(typeof (bool), "equal");
var body = E.Block
(
new[] { properties, i},
E.Assign(properties,E.Constant(props)),
E.Assign(i,E.Constant(0)),
E.Assign(equal,E.Constant(true)),
E.Loop
(
E.Property(leftObject,props[i]) == E.Property(rightObject,props[i])
)
);
如何實現一個循環中訪問到的屬性呢?
P.S. E
是我的Expression
的別名。
Thanks.I've已經在使用反射做它,但它是非常該死的慢,所以我決定了生成不同的比較對象的方法,並將其儲存在內存中編譯,比我檢查是否爲預設的類別比較法存在,只是叫它。它比反射快上百倍,因爲表達式是我需要比較的每種類型編譯一次的。 – 2010-12-07 19:33:18