C# 在c中,方法的非泛型版本优先于泛型版本

C# 在c中,方法的非泛型版本优先于泛型版本,c#,generics,nhibernate,justmock,C#,Generics,Nhibernate,Justmock,我正在尝试使用JustMock来存根一个NHibernate ICriteria 具体来说,我尝试在使用对象数组调用List方法时对其进行存根: var mockCriteria = Mock.Create<ICriteria>(); Mock.Arrange(() => mockCriteria.List<object[]>()).Returns( new object[] { new object[] {"CompanyX", 1

我正在尝试使用JustMock来存根一个NHibernate ICriteria

具体来说,我尝试在使用对象数组调用List方法时对其进行存根:

var mockCriteria = Mock.Create<ICriteria>();
Mock.Arrange(() => mockCriteria.List<object[]>()).Returns(
    new object[]
    {
        new object[] {"CompanyX", 1, 1, 1, 0}, 
        new object[] {"CompanyX", 1, 1, 1, 0}, 
        new object[] {"CompanyY", 2, 1, 1, 0}
    });

ICriteria既有List,也有List方法,看起来编译器选择的是List方法的非泛型版本,而不是泛型版本。假设我是正确的,并且它选择了错误版本的列表方法,有人知道如何强制这样做吗?或者,如果这是一个不同的问题,有人能告诉我如何解决这个问题吗?

我用最新版本的JustMock尝试过,但问题没有出现


从出现的混淆判断,似乎您使用的是一个非常旧的版本


您可以从Telerik帐户或从Telerik帐户下载最新版本的JustMock。

出于好奇,如果重命名该方法是否有效?我尝试创建一个不同的接口,并针对iCiteria是NHibernate中的一个接口进行测试,我无法更改:当我使用两个同名方法创建一个接口并尝试模拟它时,出现了相同的问题。当我更改其中一种方法的名称时,事情开始起作用。因此,是的,更改方法的名称是可行的,但我没有能力在第三方库中做到这一点。我用最新版本的JustMock进行了尝试,但问题没有出现。从存在的混淆来看,您似乎使用的是一个非常旧的版本。JustMock是2013.1.315.0版。是否有解决此问题的最新版本?升级版本似乎已解决此问题
System.InvalidOperationExceptionSystem.Collections.IList List() is not a GenericMethodDefinition. MakeGenericMethod may only be called on a method for which MethodBase.IsGenericMethodDefinition is true.
   at System.Reflection.RuntimeMethodInfo.MakeGenericMethod(Type[] methodInstantiation)
   at \x7\x5\x2.\x8\x2.\x3\x15\x2(Type \x8, MethodBase , BindingFlags \x1C\xF\x2)   at \x6\x2.\x6\x2.Create(Object , MethodInfo \x6, Boolean \x6\x2)   at \x7\x5\x2.\x11\x14\x2.\x11\x13\x2(\xF\x2 \x5\xF)   at Telerik.JustMock.Mock.\x1F.\x15\x2(\x11\x14\x2 \x2)   at \x7\x5\x2.\x5\x14\x2.\x1C[\x4\x14\x2,\x5\x2](\xF\x2 \xF\x2, Func`2 \x3\x14\x2)   atThreshold.DeviceManagerGateway.UnitTests.Queries.DeviceNetworkStatusQueryFacts.RetrieveDevicesAsDeviceNetworkStats() in DeviceNetworkStatusQueryFacts.cs: line 24