构建自定义SUM函数的更好方法,该函数采用表达式列表

时间:2017-06-05 12:49:01

标签: c# lambda sum expression add

我已经定义了以下方法:

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来完成工作的方法。

1 个答案:

答案 0 :(得分:1)

我认为您正在重新定义Aggregate方法,该方法使用先前的Add表达式和表达式列表的当前表达式。将您的代码更改为:

return expressions.Aggregate((previousExpr, currentExpr) => Expression.Add(previousExpr, currentExpr));

我不确定这是否更快,但更清洁。 previousExpr包含汇总结果