我有這樣的代碼:你如何持有對NewExpression的引用?
public static Func<IDataReader, T> CreateBinder<T>() {
NewExpression dataTransferObject = Expression.New(typeof(T).GetConstructor(Type.EmptyTypes));
ParameterExpression dataReader = Expression.Parameter(typeof(IDataReader), "reader");
IEnumerable<Expression> columnAssignments = typeof(T).GetProperties().Select(property => {
MethodCallExpression columnData = Expression.Call(dataReader, dataReaderIndexer, new[] { Expression.Constant(property.Name) });
MethodCallExpression setter = Expression.Call(dataTransferObject, property.SetMethod, new[] { Expression.Convert(columnData, property.PropertyType) });
return setter;
});
columnAssignments = columnAssignments.Concat(new Expression[] { dataTransferObject });
BlockExpression assignmentBlock = Expression.Block(columnAssignments);
Func<IDataReader, T> binder = Expression.Lambda<Func<IDataReader, T>>(assignmentBlock, new[] { dataReader }).Compile();
return binder;
}
這長話短說結合對數據庫行的屬性<T>
。問題是,當我想使用/返回dataTransferObject
時,它每次都實例化一個新副本。我如何獲得參考,而不重新創建對象?
你的意思是要重複使用相同的任何給定類型'T'的'binder'? –
由於'dataTransferObject'是一個'NewExpression',每次使用它時,它都會創建一個新的實例,而不是重複使用同一個實例。就像我在調用setter方法時,它正在執行'new T()。Property''而不是重用先前實例化的對象。 – sircodesalot