This compiles in VB.Net:
Protected Shared Function CombineFunc(Of T)(ByVal d1 As Func(Of T, Boolean), _
ByVal condType As Compare, _
ByVal d2 As Func(Of T, Boolean)) As Func(Of T, Boolean)
'Return a delegate which combines delegates d1 and d2
Select Case condType
Case Compare.Or : Return Function(x) d1(x) Or d2(x)
Case Compare.And : Return Function(x) d1(x) And d2(x)
Case Compare.Xor : Return Function(x) d1(x) Xor d2(x)
Case Compare.Equal : Return Function(x) d1(x) = d2(x)
Case Compare.OrElse : Return Function(x) d1(x) OrElse d2(x)
Case Compare.AndAlso : Return Function(x) d1(x) AndAlso d2(x)
Case Compare.NotEqual : Return Function(x) d1(x) <> d2(x)
Case Compare.LessThan : Return Function(x) d1(x) < d2(x)
Case Compare.GreaterThan : Return Function(x) d1(x) > d2(x)
Case Compare.LessThanOrEqual : Return Function(x) d1(x) <= d2(x)
Case Compare.GreaterThanOrEqual : Return Function(x) d1(x) >= d2(x)
Case Else
Throw New ArgumentException("Not a valid Condition Type", "condType")
End Select
End Function
But my conversion to C# does not:
protected static Func<T, bool> CombineFunc<T>(Func<T, bool> d1, Compare condType, Func<T, bool> d2)
{
//Return a delegate which combines delegates d1 and d2
switch (condType)
{
case Compare.Or:
return (x) => d1(x) | d2(x);
case Compare.And:
return (x) => d1(x) & d2(x);
case Compare.Xor:
return (x) => d1(x) ^ d2(x);
case Compare.Equal:
return (x) => d1(x) == d2(x);
case Compare.OrElse:
return (x) => d1(x) || d2(x);
case Compare.AndAlso:
return (x) => d1(x) && d2(x);
case Compare.NotEqual:
return (x) => d1(x) != d2(x);
case Compare.LessThan:
return (x) => d1(x) < d