2011-06-22 9 views
0

RuleViewModelBaseの初期化に使用されたタイプTの名前を取得するにはどうすればよいですか?タイプTの名前を取得する方法は?私は常に "RuntimeType"を取得しています

typeof(T).Name 

の代わりに::

typeof(T).GetType().Name 

あなたがそのタイプの名前を取得していたコードを今私はあなたがしたいと思います

public abstract class RuleViewModelBase<T> : IRuleViewModel where T : RuleEntity, new() 
    { 
     public bool Editable 
     { 
      set 
      { 
       _editable = value; 
       if (Condition != null) 
       { 
        Condition.Editable = value; 
       } 
       if (Content != null) 
       { 
        Content.Editable = value; 
       } 
      } 
      get 
      { 
       return _editable; 
      } 
     } 
     private bool _editable; 
     private string _groupsJson; 
     private List<RuleGroupJM> _groups; 
     public string RuleType { get { 
      return typeof(T).GetType().Name; } 
     } 
     public RuleContentVm Content { set; get; } 
     public RuleConditionVm Condition { set; get; } 
     public virtual void SaveToEntity(T rule) 
     { 

     } 
     public RuleEntity ConvertToEntity() 
     { 
      T rule = new T(); 
      rule = (T)this.Content.SaveToEntity(rule); 
      rule = (T)this.Condition.SaveToEntity(rule); 
      SaveToEntity(rule); 
      return rule; 
     } 
    } 
+0

'typeof(T)'は 'T'の型を返します。 'GetType'を呼び出すと、' typeof'によって返された値の型が与えられます。これは明らかにあなたが望むものではありません。 –

答えて

6

を "RuntimeType" を取得していますあなたのクラスを参照するTypeのインスタンスに対応します。つまり、効果的にtypeof(Type)(または具体的にはtypeof(RuntimeType))を実行し、その名前を取得していました。

+0

dohh ... =(。お返事ありがとうございます。 – burnt1ce