繁体   English   中英

如何使方法返回泛型?

[英]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/

尽可能避免switchif对于这个问题,在多态代码。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM