二维对象数组返回类型 - NSubstitute

4

我遇到了一个类型转换异常

System.InvalidCastException: 无法将类型为“System.Object[]”的对象强制转换为类型“System.Object[,]”。 在 Castle.Proxies.ITestProxy.Get2DArray() 在 Scratch.TestFixture.Get2DArray() in TestTest.cs: line 17

下面是相关代码:

[TestFixture]
public class TestFixture
{
    [Test]
    public void Get2DArray()
    {
        Substitute.For<ITest>().Get2DArray().Returns(new object[1,1]);
    }
}

public interface ITest
{
    object[,] Get2DArray();
}

有人能解释一下这个吗?我在想这是否是一个NSubstitute的bug?


你正在使用哪个版本的NSubstitute? - payo
我现在离开了我的工作站,无法检查,但如果有帮助的话,今天下午我通过NuGet安装了它。 - Myles McDonnell
@MylesMcDonnell:微软声称在.NET 4中修复了SRE漏洞。 - leppie
我已经测试了针对.NET 4.0版本的NSubstitute,但仍然失败。也许NSubstitute for 4.0链接到一个链接到3.5的Castle版本。顺便问一下,@leppie,你有那个声明的链接吗? - payo
@payo:这就是他们在连接网站上说的。抱歉我手头没有链接。 - leppie
2个回答

4
NSubstitute依赖于Castle,而Castle又依赖于Reflection.Emit,因此它们指责Reflection.Emit。

http://issues.castleproject.org/issue/DYNPROXY-154

为了解决您的问题,看起来您不能使用多维数组。请注意,您的异常实际上发生在 Get2DArray()而不是Returns
请注意,我个人正在开发一个不使用Reflection.Emit(也不使用Castle)的模拟框架。即使是Alpha版本也需要几周时间,但它是一个非常强大的工具。有许多Castle无法胜任的场景,而我做到了(我的网站将列出这些)。如果您感兴趣,请关注http://smug.codeplex.com

0
这可能有点晚了,但可以帮助遇到此问题并遇到此问题的人。
我们通过使您的接口返回Array而不是object[,]来绕过此限制的方法。
有一个隐式转换,因此接口实现内部的代码应该能够保持不变。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接