返回具有未知泛型类型的实例的C#函数

返回具有未知泛型类型的实例的C#函数,c#,generic-type-argument,C#,Generic Type Argument,我现在正在实现一个函数Register(),它调用内部的其他函数apirectory() public ???? Register(string username) { var result = new AccountProcess().CreateAccount(username); return ApiReturnFactory.CreateInstance(result); } newaccountprocess().CreateA

我现在正在实现一个函数
Register()
,它调用内部的其他函数
apirectory()

    public ???? Register(string username)
    {
        var result = new AccountProcess().CreateAccount(username);
        return ApiReturnFactory.CreateInstance(result);
    }
newaccountprocess().CreateAccount(username)
返回一个类似于
obj
的对象

apirectFactory.CreateInstance(obj)
返回一个类似于
obj2
的对象

我的问题是编译器已经知道我将在
apirectFactory.CreateInstance(obj)
(IntelliSense do)中返回什么类型,但是我应该在
寄存器(字符串用户名)
的返回类型
中声明什么


我不想像
obj
那样为
obj
指定泛型类型,这是不合理的,因为泛型类型可能并不总是字符串。我想要的是类似于
obj
的东西


提前感谢。

创建一个接口,并从该接口继承您的泛型类型,然后返回该接口对象或一个基类,只要适合您的用例:

public interface IObject
{

}

public class GenericClass<SomeType> : IObject
{


}

创建一个接口并从该接口继承泛型类型,然后返回该接口对象或一个基类,只要适合您的用例:

public interface IObject
{

}

public class GenericClass<SomeType> : IObject
{


}
公共obj2寄存器(字符串用户名)
{
var result=new AccountProcess().CreateAccount(用户名);
return(obj2)apirectFactory.CreateInstance(结果);
}
公共obj2寄存器(字符串用户名)
{
var result=new AccountProcess().CreateAccount(用户名);
return(obj2)apirectFactory.CreateInstance(结果);
}


您是否查看了
动态
返回类型?“因为泛型类型可能并不总是字符串”-这可能是错误的,或者您的代码示例缺少某些内容<代码>结果必须具有编译时已知的明确定义类型。如果是,则类型是固定的,可以插入。如果没有,那么函数中肯定有其他一些泛型用法,而您没有显示。您能提供
CreateAccount
CreateInstance
方法的精确签名吗?@Mauro我不想以从
Register()返回的对象的方式执行此操作
丢失它的类型。@Damien\u不信者是的,你是对的,实际上它总是返回相同的类型,但是有没有办法让返回对象自动检测泛型类型?如果我想修改
CreateAccount()
以在将来返回其他泛型类型,那么我也应该更改
Register
的返回类型?您是否查看了
dynamic
返回类型?“因为泛型类型可能并不总是字符串”-这可能是错误的,或者您的代码示例缺少某些内容<代码>结果必须具有编译时已知的明确定义类型。如果是,则类型是固定的,可以插入。如果没有,那么函数中肯定有其他一些泛型用法,而您没有显示。您能提供
CreateAccount
CreateInstance
方法的精确签名吗?@Mauro我不想以从
Register()返回的对象的方式执行此操作
丢失它的类型。@Damien\u不信者是的,你是对的,实际上它总是返回相同的类型,但是有没有办法让返回对象自动检测泛型类型?如果我想修改
CreateAccount()
以在将来返回其他泛型类型,那么我也应该更改
Register
的返回类型?我已经尝试过这个方法,但是返回的对象在ItelliSense列表中似乎没有GenericClass属性。您需要在接口中定义泛型类型的公共成员,以便通过接口的引用来访问type@EhasnSaijad很抱歉我以为我不明白你是什么意思。请查看位于的
ApiReturn
IApiReturn
。我是按你的方式做的吗?根据你展示的代码,您不需要接口,因为您的整个类已经是泛型的。我已经尝试了此方法,但返回的对象似乎没有ItelliSense列表中的GenericClass属性。您需要在接口中定义泛型类型的公共成员,以便通过接口的引用访问type@EhasnSaijad很抱歉我以为我不明白你是什么意思。请查看位于的
ApiReturn
IApiReturn
。我是按你的方式做的吗?从你展示的代码来看,你不需要接口,因为你的整个类已经是泛型的了。
public obj2<T> Register<T>(string username)
{
    var result = new AccountProcess().CreateAccount(username);
    return (obj2<T>)ApiReturnFactory.CreateInstance(result);
}