0

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

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

我实现它如下:

  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 类型。

4

2 回答 2

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));
    }
}
于 2012-07-16T20:44:46.150 回答
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>();

笔记:

  • 你真的不需要在参数列表中传递任何东西来确定返回值的类型。
  • 确保将 try-catch 放在您检查适合您未来使用的类型的任何位置。
于 2012-07-16T20:56:51.347 回答