0

我有以下课程

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

谢谢你,小丑。它是一个来自 NetworkCommDotNet 库的事件处理程序。

我的缺点:

1)第一个错误(成员无法识别)源于(有点令人惊讶)“输入”参数作为普通对象出现的事实。用另一种方法铸造它就可以了。2)关于实例化的错误:库中的委托定义有一个 where 子句,它声明 T 必须是类,但没有 new() 约束。

4

1 回答 1

1

那不是委托,那是通用方法。目前尚不清楚您想做什么以及为什么需要通用方法。如果您真的这样做,请尝试以下方式:

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

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

于 2013-10-31T12:57:54.270 回答