返回具有未知泛型类型

时间:2017-03-29 10:47:27

标签: c# generic-type-argument

我现在正在实现一个函数Register(),它在里面调用其他函数ApiReturnFactory()

    public ???? Register(string username)
    {
        var result = new AccountProcess().CreateAccount(username);
        return ApiReturnFactory.CreateInstance(result);
    }

new AccountProcess().CreateAccount(username)会返回obj<WhateverType>之类的对象。

ApiReturnFactory.CreateInstance(obj)会返回obj2<SameTypeWithWhateverType>之类的对象。

我的问题是编译器已经知道我将在ApiReturnFactory.CreateInstance(obj)(IntelliSense做)中返回什么类型,但我应该在????的返回类型Register(string username)中说明什么?

我不想特定obj obj<string>的泛型类型,这是不合理的,因为泛型类型可能并不总是字符串。我想要的是obj<T>

提前致谢。

2 个答案:

答案 0 :(得分:4)

创建一个接口并从该接口继承您的泛型类型并返回该接口对象或基类在您的用例中适用的任何类型:

public interface IObject
{

}

public class GenericClass<SomeType> : IObject
{


}

然后你可以返回接口对象:

public IObject Register(string username)
{
    var obj = new AccountProcess().CreateAccount(username);
    return ApiReturnFactory.CreateInstance(obj);
}

答案 1 :(得分:1)

public obj2<T> Register<T>(string username)
{
    var result = new AccountProcess().CreateAccount(username);
    return (obj2<T>)ApiReturnFactory.CreateInstance(result);
}