mono会出现意外的编译错误

时间:2013-10-30 17:55:29

标签: mono compiler-errors

我有以下课程

public class LockRequest
{
    public int Id { get; set; }
    public string TypeName { get; set; }
    public bool Ok { get; set; }        

    public LockRequest ( int id, string t)
    { 
        Id = id;
        TypeName = t;
    }
}

然后,它在委托中引用,如下所示

private static void ReceiveLockRequest<LockRequest>(PacketHeader header, Connection   connection, LockRequest input )
{
    LockRequest lr = new LockRequest(1, "SomeTypeName" );

    Console.WriteLine( String.Format ( "{0} ", input.TypeName) ); 
}

编译时,委托中的两行都会导致编译错误。 带有“new()”的行产生“无法创建类型类'LockRequest'的实例,因为它没有'new()'约束。 显示一些输入数据的行给出“类型'Lockrequest'不包含'TypeName'的定义,也没有扩展方法'TypeName'......等”。

有人可以解释为什么会出现这种情况吗?

我的开发环境是Ubuntu 10.04(64位)和Monodevelop 2.8.6.3

TIA

可以添加一些信息。

我改变了类的名称,并编译了这个东西。整个类将由ProtoBuf序列化,因此必须使用属性进行修饰。这是一个样本

[ProtoContract]
public class Foo
{
   [ProtoMember(1)]
   public int  { get; protected set; }

   [ProtoMember(2)]
   public string TypeName { get; protected set; }

   ...

在我添加属性后,单声道停止编译。同样的错误再次提升。 为了测试它,我评论了属性,执行全部清理,重新编译。错误再次出现,好像MonoDevelop缓存了它们。

我需要一些帮助,而不是在最初的帖子之后。

2013年10月31日

谢谢Jester。它是来自NetworkCommDotNet库的事件处理程序。

我的错误:

1)第一个错误(成员未被识别)从“输入”参数作为普通对象出现(有点令人讨厌)的事实引发。用另一种方法强制转换就可以了。 2)关于instanciation的错误:库中的委托定义有一个where子句,它声明T必须是class,但没有new()约束。

1 个答案:

答案 0 :(得分:1)

那不是代表,这是一种通用的方法。 目前尚不清楚您想要做什么以及为什么需要通用方法。 如果你真的这样做,那就试试一下:

private static void ReceiveLockRequest<T>(PacketHeader header, Connection   connection, T input) where T:LockRequest

PS:你的开发环境很老,考虑升级。