对于这个问题,考虑(创建)接口:
public interface ITestMe { string TakeInt64(long x); }
然后运行以下代码:
public void test() { var mock1 = new Mock<ITestMe>(MockBehavior.Strict); Expression<Func<ITestMe,string>> expr1 = x => x.TakeInt64(2); Console.WriteLine(expr1); mock1.Setup(expr1).Returns("OK"); var s1 = mock1.Object.TakeInt64(2L); // OK var mock2 = new Mock<ITestMe>(MockBehavior.Strict); Expression<Func<ITestMe,string>> expr2 = x => x.TakeInt64(DateTime.Today.Year / 1000); Console.WriteLine(expr2); mock2.Setup(expr2).Returns("OK"); var s2 = mock2.Object.TakeInt64(2L); // OK var mock3 = new Mock<ITestMe>(MockBehavior.Strict); Expression<Func<ITestMe,string>> expr3 = x => x.TakeInt64((int)(DayOfWeek)Enum.Parse(typeof(DayOfWeek),"Tuesday")); Console.WriteLine(expr3); mock3.Setup(expr3).Returns("OK"); var s3 = mock3.Object.TakeInt64(2L); // OK var mock4 = new Mock<ITestMe>(MockBehavior.Strict); Expression<Func<ITestMe,string>> expr4 = x => x.TakeInt64(GetInt32()); Console.WriteLine(expr4); mock4.Setup(expr4).Returns("OK"); //var s4 = mock4.Object.TakeInt64(2L); // MockException,All invocations on the mock must have a corresponding setup. var mock5 = new Mock<ITestMe>(MockBehavior.Strict); Expression<Func<ITestMe,string>> expr5 = x => x.TakeInt64(int.Parse("2")); Console.WriteLine(expr5); mock5.Setup(expr5).Returns("OK"); //var s5 = mock5.Object.TakeInt64(2L); // MockException,All invocations on the mock must have a corresponding setup. var mock6 = new Mock<ITestMe>(MockBehavior.Strict); Expression<Func<ITestMe,string>> expr6 = x => x.TakeInt64(GetInt32() + 0); Console.WriteLine(expr6); mock6.Setup(expr6).Returns("OK"); var s6 = mock6.Object.TakeInt64(2L); // OK var mock7 = new Mock<ITestMe>(MockBehavior.Strict); Expression<Func<ITestMe,string>> expr7 = x => x.TakeInt64(1 * int.Parse("2")); Console.WriteLine(expr7); mock7.Setup(expr7).Returns("OK"); var s7 = mock7.Object.TakeInt64(2L); // OK } static int GetInt32() { return 2; }
在所有七种情况下,我们创建一个表达式树,其中TakeInt64获取int(Int32)而不是long(Int64).但是,众所周知,存在从int到long的隐式转换,它将出现在表达式树中(expr1除外,编译器为我们转换常量).
为什么上面的案例s4和s5不起作用?奇怪的是,正如你所看到的,如果我们在s6和s7的情况下将0或多次加1,那么它是否有效(即使该类型仍为int,隐式转换为long)?
由于案例expr2,请在3000年之前回答.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。