这是我的代码

public interface ITranslator<E, R>
{
    E ToEntity<T>(R record);
}

class Gens : ITranslator<string, int>
{
    #region ITranslator<string,int> Members

    public string ToEntity<MyOtherClass>(int record)
    {
        return record.ToString();
    }

    #endregion
}

编译时,出现错误Type parameter declaration must be an identifier not a type
为什么我不能拥有ToEntity<MyOtherClass>而只能拥有ToEntity<T>

编辑:MyOtherClass在做什么?我在实体(相当于 Entity Framework 的POCO)和记录(由框架返回的对象)之间转换多个表/类。所以我想用这个来做我的类(class)特定的转换

最佳答案

您的界面具有一个通用的ToEntity<T>方法,您已在实现类Gens中将其设为ToEntity<MyOtherClass>成为非通用方法。 (泛型方法可以采用任何类型参数,可能会给T赋予某些约束。您的Gens类试图仅为类型参数ToEntity提供MyOtherClass的定义,这违背了泛型的目的。)

在您的代码示例中,尚不清楚Gens类如何尝试使用MyOtherClass类型。它肯定不参与ToEntity的逻辑。我们需要更多信息,才能进一步指导您。

为了说明这一点,这是您目前对ITranslator<E, R>接口(interface)的定义(用简单的英语提供):



另一方面,您的Gens类的当前设计方式是“实现”上述接口(interface),如下所示:



从这两个描述中,很明显Gens并没有真正完成ITranslator<E, R>接口(interface)所保证的。即,它不愿意为其ToEntity方法接受用户指定的类型。这就是为什么此代码不会为您编译的原因。

09-12 06:02