如何访问返回Generic Type的类中的方法

时间:2012-07-16 20:41:07

标签: c# .net

我有一个名为config的类,其中包含两个名为key paramValue和parameterPath的字符串字段。

当我应用类的ChooseType方法时,该方法必须返回一个不同类型的变量paramValue(Int或bool或String)。

我按照以下方式实施了它:

  class ConfigValue
  {
      public string paramPath;
      private string paramValue;

      public enum RetType {RetInt, RetBool, RetString};

       public T PolimorphProperty<T>(RetType how) 
       {

          { 
            switch (how)
             {
             case RetType.RetInt:
               return (dynamic)int.Parse(paramValue);

             case RetType.RetBool:
               return (dynamic)Boolean.Parse(paramValue);

             case RetType.RetString:
               return (T)(object)paramValue;

             default:
               throw new ArgumentException("RetType not supported", "how");

              }
          }   
      }
  }

我的问题是我如何在ConfigValue类中访问PolimorphProperty方法,以检索例如paramValue Int类型。

2 个答案:

答案 0 :(得分:4)

TRetType都是多余的。它应该是这样的:

class ConfigValue
{
    public string paramPath;
    private string paramValue;

    public T PolimorphProperty<T>()
    {
        return (T)Convert.ChangeType(paramValue, typeof(T));
    }
}

将其称为configValue.PolimorphProperty<int>()

或者如果您需要手动实现类型转换,您可以执行以下操作:

class ConfigValue
{
    public string paramPath;
    private string paramValue;

    public T PolimorphProperty<T>()
    {
        if (typeof(T) == typeof(MySpecialType))
            return (T)(object)new MySpecialType(paramValue);
        else
            return (T)Convert.ChangeType(paramValue, typeof(T));
    }
}

答案 1 :(得分:1)

我认为以下代码最符合你想要的(我在写这里之前测试过它......)

public T PolimorphProperty<T>()
{
      object tt = Convert.ChangeType(paramValue, typeof(T));
      if (tt == null)
         return default(T);
      return (T) tt;
}

你可以这样调用代码:

 int ret = cv.PolimorphProperty<int>();

注意:

  • 您确实不需要在param列表中传递任何内容来确定返回值的类型。
  • 确保将try-catch放在检查适当类型的地方,以备将来使用。