我已经定义了以下方法:
var number1 = Expression.Constant(42.0);
var number2 = Expression.Constant(10.0);
var resultExpression = Sum(new { number1, number2 });
var value = Expression.Lambda(resultExpression).Compile().DynamicInvoke();
可以用作:
public class CustomOutputStream extends OutputStream{
private JTextArea textArea;
public CustomOutputStream(JTextArea textArea) {
this.textArea = textArea;
}
@Override
public void write(int b) throws IOException {
// redirects data to the text area
textArea.append(String.valueOf((char) b));
// scrolls the text area to the end of data
textArea.setCaretPosition(textArea.getText().length());
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
String s = new String(b,off,len);
textArea.append(s);
textArea.setCaretPosition(textArea.getText().length());
}
@Override
public void write(byte[] b) throws IOException {
this.write(b, 0, b.length);
}
然而,当添加大量表达式时,我认为性能不佳。
所以我想知道是否可以创建一个使用Enumerable.Sum或Queryable.Sum来完成工作的方法。
答案 0 :(得分:1)
我认为您正在重新定义Aggregate方法,该方法使用先前的Add
表达式和表达式列表的当前表达式。将您的代码更改为:
return expressions.Aggregate((previousExpr, currentExpr) => Expression.Add(previousExpr, currentExpr));
我不确定这是否更快,但更清洁。
previousExpr
包含汇总结果