Vb.net 将字符串与lambda表达式组合

Vb.net 将字符串与lambda表达式组合,vb.net,arrays,lambda,Vb.net,Arrays,Lambda,我有一个字符串数组Array1和一个字符串数组A2。我想将它们合并到第三个数组A3中,但不包括重复值。这可以通过lambda表达式实现,还是只能通过迭代数组并检查array.Contains()?您可以执行以下操作 Dim newArray = array1.Union(array2).Distinct().ToArray() 这需要Visual Studio 2008或更高版本(VB.Net 9.0)。公共静态表达式和(此表达式expr1,表达式expr2) { var invokedExp

我有一个字符串数组Array1和一个字符串数组A2。我想将它们合并到第三个数组A3中,但不包括重复值。这可以通过lambda表达式实现,还是只能通过迭代数组并检查array.Contains()?

您可以执行以下操作

Dim newArray = array1.Union(array2).Distinct().ToArray()
这需要Visual Studio 2008或更高版本(VB.Net 9.0)。

公共静态表达式和(此表达式expr1,表达式expr2)
{
var invokedExpr=Expression.Invoke(expr2,expr1.Parameters.Cast());
返回Expression.Lambda(Expression.AndAlso(expr1.Body,invokedExpr),expr1.Parameters);
}
公共静态表达式或(此表达式expr1,表达式expr2)
{
var invokedExpr=Expression.Invoke(expr2,expr1.Parameters.Cast());
返回Expression.Lambda(Expression.OrElse(expr1.Body,invokedExpr),expr1.Parameters);
}

您还需要一个对Linq的引用(不确定在VB中的名称是否相同,我使用C#))。@BarretJ,2008年它作为项目级导入添加,所以应该已经存在了。Distinct()不是只有2个重载吗?没有参数,1接受IEQualityComparerTank,它工作正常。我认为这里不需要Distinct,因为Union已经返回了唯一的值。
array1.Union(array2).Distinct().ToArray();
    public static Expression<Func<T, TResult>> And<T, TResult>(this Expression<Func<T, TResult>> expr1, Expression<Func<T, TResult>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, TResult>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
    }

    public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
    }