返回具有未知泛型类型的实例的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);
}