0

keyparamValueとparameterPathという名前の2つの文字列フィールドを持つconfigという名前のクラスがあります。

クラスのChooseTypeメソッドを適用すると、メソッドは異なるタイプ(IntまたはboolまたはString)で1つの変数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メソッドにアクセスして、たとえばparamValueIntタイプを取得する方法です。

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 に答える