如何使方法返回泛型类型?

时间:2012-07-15 12:19:04

标签: c# .net generics

我有一个名为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返回Object类型的问题。

请知道我在代码中更改了什么以获得适当的类型(int,bool,string), 不是对象?

5 个答案:

答案 0 :(得分:1)

这样做:

public T PolimorphProperty<T>(string key)
{
    return (T) objectInstanceHere;
}

用法示例:

int i = PolimorphProperty<int>("somekey");

这支持http://www.antiifcampaign.com/

在多态代码中,尽可能避免switchif

答案 1 :(得分:0)

public T PolimorphProperty<T>(string key, T how)
{
    //todo
}

答案 2 :(得分:0)

C#中的任何type 实际上一个对象 从我对你的问题的理解,你这样称呼你的方法:
PolimorpthProperty(key, RetType.SomeType)
该方法返回一个对象。你应该这样使用它:
int key = (int)PolimorthProperty(key, RetType.RetInt);
这称为Unboxing

答案 3 :(得分:0)

这个怎么样,考虑一下'Polymorph Property'的原始实现仍然在你的项目中,你添加了这个:

public TType PolimorphProperty<TType>(string key, RetType how) 
 {
     return (TType)PolimorphProperty(key, how);
 }

答案 4 :(得分:0)

如果我理解正确,你正在寻找这样的东西:

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获取不同的对象,使用不同的逻辑,那么你无论如何都必须打开类型,因为除非你的集合支持某种类型的对象(通常它们),编译器不会我不知道该怎么办。
在这种情况下,请检查此question