我得到一个转换异常
System.InvalidCastException:无法将"System.object[]"类型的对象强制转换为"System.object[,]"类型。位于Castle.Proxies.ITestProxy.Get2DArray()在TestTest.cs中的Scratch.TestFixture.Get2DArray():第17行
来自以下内容:
[TestFixture]
public class TestFixture
{
[Test]
public void Get2DArray()
{
Substitute.For<ITest>().Get2DArray().Returns(new object[1,1]);
}
}
public interface ITest
{
object[,] Get2DArray();
}
有人能解释一下吗?我想这是NSubstitute漏洞?
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
这可能有点晚,但可以帮助遇到此问题并遇到此问题的人。
我们找到了绕过这个限制的方法,让您的接口返回Array
而不是object[,]
。
有一个隐式转换,因此接口实现中的代码应该能够保持不变。