14

モノラルコンパイラとMicrosoftの.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.

この型には実際には再帰的な一般的な定義があるので、私の質問は、なぜそれがmonoで機能するのかということです。[コードが実行され、期待される結果が生成されます]

完全なソースコードはここにあります: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

4

1 に答える 1

6

これは既知の問題です。これは、コンパイラ エラーとして報告される可能性があります。

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf (129ページ)

Mono での作業に関しては、仕様に関する限り、Mono の作業が「壊れている」場所がいくつかあります。

再帰的なラムダは、モノで機能するもののもう1つの例です。

于 2012-07-02T16:36:19.833 に答える