2012-07-02 79 views
14

我已經有一些C#代碼在單聲道和微軟的.net編譯器下編譯,但只能在單聲道上運行。 的錯誤信息是(由我添加的新行)在c中遞歸泛型類型的問題#

Unhandled Exception: System.TypeLoadException: 
Could not load type 'Hasse.Groups.Heavy.Product.PowerGroup`1' 
from assembly 'Hasse, Version=1.0.x.y, Culture=neutral, PublicKeyToken=null' 
because it has recursive generic definition. 

類型實際上有一個遞歸的一般定義,所以我的問題是:爲什麼它與單工作? [代碼運行併產生預期的結果]

完整的源代碼是在這裏:https://github.com/miniBill/Hasse

減少代碼仍然崩潰是在這裏:

public class Group<T> : IWrappableGroup<WrapperGroup<T>> {} 

public class WrapperElement<T> {} 

public interface IWrappableGroup<U> {} 

public class WrapperGroup<T> : Group<WrapperElement<T>> {} 

class MainClass { 
    public static void Main(string[] args){ 
     var ng = new Group<object>(); 
    } 
} 

這裏是證明它適用於單聲道:http://ideone.com/ZvA3I

+11

而不是給我們鏈接到一個大的項目,這將是有用的,如果你能* *後很短的(最小的),但證明問題的完整例子。 –

+0

讓我試着創建一個最小示例 – miniBill

+0

完成。花了點時間:) – miniBill

回答

6

這是known問題。它可能被報告爲編譯器錯誤。

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf(第129頁)

至於在單工作,有幾個地方工作單是「破」只要規範而言。

Recursive lambdas是某種另一個〔實施例,在單聲道的作品不應該)

+0

謝謝。雖然我懷疑它在Mono中的工作原因與遞歸lambdas類似:它可能會爆炸,但它可能有意義(如我的代碼所做的那樣) – miniBill

+0

您可以在http://bugzilla.xamarin中提交「遞歸lambdas」問題。 com/please? – knocte