2011-03-11 79 views
2

我在monotouch(命名空间System.Collections.Generic)中使用了一个通用的Stack类型。 在一个单独的NUnit的项目,即仅参照从MonoTouch的封装组件,我延长我的Mo​​noTouch的阶级和重新实例堆栈:单击不能将类型System.Collections.Generic.Stack隐式转换为相同类型

using System.Collections.Generic; 
namespace Tests 
{ 
public class MyExtendedClass : MyExtendableClass 
    { 
     public MyExtendedClass() 
     { 
      m_myStackVariable = new Stack<string>(); 

使我有以下错误信息:

Cannot implicitly convert type System.Collections.Generic.Stack<string> to System.Collections.Generic.Stack<string>

当我尝试“去基地”的堆栈类型时,它显示我的mscorlib在它的System.Collections.Generic命名空间的程序集浏览器中,不像堆栈中的System.dll一样支持堆栈类型<>浏览器。

任何人都知道这里发生了什么?在同一个命名空间中,有两种类型在这些项目中有相同的名称吗?这里给我的感觉是什么?

回答

0

确保您的NUnit项目引用了MonoTouch核心库。尽管如此,有时甚至不能根据您的代码明确解决问题。

NUnit项目将在Mac上使用Mono库,因此例如返回Stack(T)的MonoTouch库不能转换为Mac上的Stack(T)。

这个问题基本上使我无法进行单元测试,幸运的是使用“var”关键字可以解决它,但这取决于你的情况。

你能发表更多的代码吗?可能有解决方法。

+0

嗨!我已经从nunit项目中删除了默认的系统引用,并添加了monotouch库(monotouch.dll,mscorlib.dll,System.Core.dll,System.dll,System.xml.dll - 全部来自monotouch包)。我以为我找到了解决方法,但现在我不断收到错误:“System.MissingFieldException:Field'MyNamespace.MyExtendableClass.m_myStackVariable'not found”。你有同样的错误吗? – TenaciousG 2011-03-17 20:56:30

相关问题