我如何加入像theese这样的两个lambda表达式:
Expression<Func<string, bool>> expr1 = a => a.Length > 100;
Expression<Func<string, bool>> expr2 = b => b.Length < 200;
Run Code Online (Sandbox Code Playgroud)
......变成这样的表达式:
Expression<Func<string, bool>> expr3 = s => s.Length < 100 && s.Length < 200;
Run Code Online (Sandbox Code Playgroud)
也就是说,将它们与AndAlso运算符连接起来.(或者任何其他运营商......)
我实际上成功地进行了一些讨厌的递归替换lambda参数,然后加入Expression.AndAlso方法.但我正在寻找更简单的东西.
例如:(显然不起作用.)
Expression<Func<string, bool>> expr3 = c => expr1(a) && expr2(b);
Run Code Online (Sandbox Code Playgroud) 在研究C#动态关键字如何工作时,我偶然发现了一些奇怪的行为.它几乎看起来像一个bug,但它可能更有可能是这种行为的原因.
在下面的代码中,有两个调用,一个调用obj1,一个调用obj2,但只有一个调用正确执行.似乎局部变量类型是原因,但也应该可以从IDynamicTarget访问"Hello",因为它扩展了IDynamicTargetBase.
namespace DynamicTesting
{
interface IDynamicTargetBase
{
string Hello(int a);
}
interface IDynamicTarget : IDynamicTargetBase
{
}
class DynamicTarget : IDynamicTarget
{
public string Hello(int a)
{
return "Hello!";
}
}
class Program
{
static void Main(string[] args)
{
dynamic a = 123;
IDynamicTargetBase obj1 = new DynamicTarget();
obj1.Hello(a); // This works just fine
IDynamicTarget obj2 = new DynamicTarget();
obj2.Hello(a); // RuntimeBinderException "No overload for method 'Hello' takes '1' arguments"
}
}
}
Run Code Online (Sandbox Code Playgroud)