0

请看下面的代码:

public class BaseClass
{
}

public class SubClass : BaseClass
{
}

public class QueryClass
{
    public TBaseClass[] QueryBase<TBaseClass>() where TBaseClass : BaseClass
    {
        throw new NotImplementedException();
    }

    public TSubClass[] QuerySub<TSubClass>() where TSubClass : SubClass
    {
        throw new NotImplementedException();
    }

    public TClass[] Query<TClass>() where TClass : BaseClass
    {
        if (typeof(TClass).IsSubclassOf(typeof(SubClass)))
        {
            return QuerySub<TClass>(); // there is error The type 'TClass' must be convertible to SubClass
        }

        return QueryBase<TClass>();
    }
}

问题是如何实现查询方法。如果有可能..

4

2 回答 2

1

你想要做的是做这样的事情:

public class Animal { }
public class Dog : Animal { }

public void HandleAnimal<T>() where T : Animal
{

}
public void HandleDog<T>() where T : Dog
{

}

在这种情况下,当您参考时Animal,无法知道它是什么typeof动物。即使该方法返回 true,在您的代码上下文中,它仍然始终是 an ,并且当您只知道类型是 an 时Animal,您无法处理 a 。如果你在方法中处理对象的实例,你可能会开始强制转换或实例化,如果你知道它是一个子类,然后通过它。doganimalsubclass

于 2012-12-10T14:36:02.900 回答
0

以反思结束。

        if (typeof(TClass).IsSubclassOf(typeof(SubClass)))
        {
            var method = typeof(QueryClass).GetMethod("QuerySub").MakeGenericMethod(typeof (TClass));

            return (TClass[]) method.Invoke(this, new object[0]);
        }
于 2012-12-10T15:54:19.677 回答