2012-07-02 10 views
14

Tengo un código C# que compila bien tanto en mono como en los compiladores .NET de Microsoft, pero solo se ejecuta en mono. El mensaje de error es (nuevas líneas añadidas por mí)Problemas con el tipo genérico recursivo en 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. 

El tipo tiene realmente una definición genérica recursivo, por lo que mi pregunta es: ¿por qué funciona con mono? [El código se ejecuta y produce el resultado esperado]

código fuente completo está aquí: https://github.com/miniBill/Hasse

código reducido, que vuelve a colgarse está aquí:

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>(); 
    } 
} 

Aquí es prueba de que funciona en mono: http://ideone.com/ZvA3I

+11

En lugar de darnos el enlace a un gran proyecto, sería útil si pudiera * * después de un corto (mínimo), pero ejemplo completo que demuestra el problema. –

+0

Déjame intentar y crear un ejemplo mínimo – miniBill

+0

Hecho. Tomó algo de tiempo :) – miniBill

Respuesta

6

Este es un problema de known. Podría ser reportado como un error de compilación.

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf (página 129)

En cuanto a trabajar en mono, hay varios lugares donde Mono de trabajo está "roto" en lo que se refiere a las especificaciones.

(Recursive lambdas son otra exmaple de algo que funciona en mono que no debería)

+0

Gracias. Aunque sospecho que funciona en Mono por la misma razón Recurrent lambdas do: puede explotar, pero puede tener sentido (como lo hizo mi código) – miniBill

+0

Puedes archivar el problema de "lambdas recursivas" en http: //bugzilla.xamarin. com/por favor? – knocte

Cuestiones relacionadas