0

我收到错误Using the generic type GetOption<EnumT>requires 1 type argument。错误来自我继承的第一行List<GetOption>

我正在尝试建立一个继承结构,我可以在其中对基础对象进行所有处理,并将细节保存在子对象中。子对象的数量为 N。基础对象需要在实例化时被告知子类型。

最父类将从 List 继承,因此我可以在最父对象中具有列表的功能,以添加将在实例化时通知其类型的通用子级。

这是我到目前为止所拥有的:

前两个类是基类

public abstract class GetOptions : List<GetOption>
{
    public enum FilterDirections
    {
        Ascending,
        Descending
    }

    private FilterDirections _filterDirection;

    public FilterDirections FilterDirection
    {
        get { return _filterDirection; }
        set { _filterDirection = value; }
    }

    public GetOptions()
    {
        FilterDirection = FilterDirections.Ascending;
    }
}

public abstract class GetOption<EnumT>
{
    private EnumT _column;

    public EnumT Column
    {
        get { return _column; }
        set { _column = value; }
    }

    public GetOption()
    {

    }
}

最后两个类是示例子类

public class PersonTypeLookupGetOptions : GetOptions
{
    public PersonTypeLookupGetOptions() : base() { }
}

public class PersonTypeLookupGetOption : GetOption<PersonTypeLookup.PersonTypeLookupFields>
{

}

我将如何完成我想做的事情?

编辑:

我要做的是在我从子对象中继承的列表中定义对象的类型。

通过我第一个问题下的评论,我能够找到我需要的解决方案。类定义如下:

public abstract class GetOptions<ChildT, EnumT> : List<ChildT> where ChildT : GetOption<EnumT>

public abstract class GetOption<EnumT>

public class PersonTypeLookupGetOptions : GetOptions<PersonTypeLookupGetOption, PersonTypeLookup.PersonTypeLookupFields>

public class PersonTypeLookupGetOption : GetOption<PersonTypeLookup.PersonTypeLookupFields>
4

2 回答 2

2

目前尚不清楚您要做什么,但可能对您有所帮助的一件事是将泛型参数传播到集合类型:

public abstract class GetOptions<EnumT> : List<GetOption<EnumT>>

最父类将从 List 继承,因此我可以在最父对象中具有列表的功能,以添加将在运行时通知其类型的通用子级

请注意,泛型是在编译时绑定的,而不是在运行时绑定的。

于 2013-04-09T15:47:27.117 回答
0

虽然我不知道您的更大问题的解决方案,但我相当确定您的错误是由于您List<GetOption>在编译器期望时使用了List<GetOption<EnumT>>. 话虽这么说,我真的不明白你要在这里做什么......

编辑:似乎你只是想GetOption成为一个没有<EnumT>部分的类,然后你想从List<GetOption>. 因此,将基类更改为GetOption而不是GetOption<EnumT>可能会解决您的问题。

于 2013-04-09T15:48:07.747 回答