2012-07-02 37 views
14

Tôi đã có một số mã C# biên dịch tốt theo cả hai trình đơn .net của Microsoft, nhưng chỉ chạy trên mono. Các thông báo lỗi là (dòng mới thêm bởi tôi)Các vấn đề với kiểu chung đệ quy trong 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. 

Các loại thực sự có một định nghĩa chung đệ quy, vì vậy câu hỏi của tôi là: tại sao nó làm việc với mono? [Mã này chạy và tạo ra kết quả mong đợi]

mã nguồn đầy đủ ở đây: https://github.com/miniBill/Hasse

Giảm mã mà vẫn bị treo ở đây:

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

Đây là bằng chứng cho thấy nó hoạt động trên mono: http://ideone.com/ZvA3I

+11

Thay vì cung cấp cho chúng ta những liên kết đến một dự án lớn, nó sẽ là hữu ích nếu bạn có thể * bài * một đoạn ngắn (tối thiểu) nhưng ví dụ hoàn chỉnh thể hiện vấn đề. –

+0

Hãy để tôi thử và tạo một ví dụ tối thiểu – miniBill

+0

Xong. Mất một thời gian :) – miniBill

Trả lời

6

Đây là sự cố known. Nó có thể được báo cáo như là một lỗi trình biên dịch.

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

Đối với làm việc trong Mono, có một số nơi Mono làm việc là "vỡ" như xa như các thông số kỹ thuật là có liên quan.

(Recursive lambdas cũng là một exmaple của một cái gì đó mà làm việc trong Mono rằng không nên)

+0

Cảm ơn bạn. Mặc dù tôi nghi ngờ rằng nó hoạt động ở Mono vì cùng một lý do lambdas đệ quy làm: nó có thể phát nổ, nhưng nó có thể có ý nghĩa (như mã của tôi đã làm) – miniBill

+0

Bạn có thể gửi vấn đề "lambdas đệ quy" trong http: //bugzilla.xamarin. com/xin vui lòng? – knocte

Các vấn đề liên quan