[英]How to make method to return generic type?
我有一个名为config的类,其中一个名为key
字符串字段。
当我应用该类的GET属性时,该属性必须返回一个不同类型(Int或bool或String)的变量键。
我实现它如下:
public enum RetType {RetInt, RetBool, RetString};
...
public object PolimorphProperty(string key, RetType how)
{
get
{
switch (how)
{
case RetType.RetInt:
...;
case RetType.RetBool:
...;
case RetType.RetString:
...;
}
}
}
但是PolimorphProperty返回对象类型的问题。
我应该在代码中更改什么以获得适当的类型(int,bool,string),而不是对象?
做这个:
public T PolimorphProperty<T>(string key)
{
return (T) objectInstanceHere;
}
用法示例:
int i = PolimorphProperty<int>("somekey");
这支持http://www.antiifcampaign.com/
尽可能避免switch
, if
对于这个问题,在多态代码。
public T PolimorphProperty<T>(string key, T how)
{
//todo
}
C#中的任何type
实际上都是对象。
根据您对问题的了解,您可以通过以下方式调用方法:
PolimorpthProperty(key, RetType.SomeType)
该方法返回一个对象。 您应该以这种方式使用它:
int key = (int)PolimorthProperty(key, RetType.RetInt);
这称为拆箱 。
怎么样,请考虑您原来的“ PolimorphProperty”实现仍保留在您的项目中,并添加以下内容:
public TType PolimorphProperty<TType>(string key, RetType how)
{
return (TType)PolimorphProperty(key, how);
}
如果我理解正确,那么您正在寻找这样的东西:
public T GenericMethod<T>(string key)
{
var ret = new object(); // Retrieve object from whatever...
return (T) ret;
}
public void UsageExample()
{
int typedResult = GenericMethod<int>("myKey");
}
如果您尝试使用不同的逻辑基于类型T获取不同的对象,则无论如何都将不得不打开类型,因为除非您的集合支持某种类型的对象(通常是这样),否则编译器不会知道该怎么办。
在这种情况下,请检查此问题 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.