2012-12-28 10 views
5

メソッド名にXなどのクラス名が必要です。一方で、型の安全性を失いたくないので、他の開発者に渡すことはできませんメソッドへの文字列(クラス名)。このようなメソッドに安全にクラス名を渡します

何か:クラスについてのメタデータが含まれ、Type

void X(??? class) // --> don't know how 
{ 
var className = get the name of class // --> which I don't know how 
Console.WriteLine(className); 
} 

X(tblEmployee); //--> usage of X, where tblEmployee is a POCO class 

答えて

14

あなたが探していると呼ばれています。

objectインスタンスでtypeof(class)または.GetType()メソッドを使用できます。

typeofは静的に解決され、GetTypeは実行時に解決されます。

void WriteClassName<TClass>(TClass item) 
    where TClass : class { 
    Console.WriteLine(item.GetType().FullName); 
} 

をそしてあなたの要件に応じてTClassにcontraintsを適用します。あなたのような、ジェネリック医薬品とFullName property of Typeを使用することができます

void X(Type type) 
{ 
    Console.WriteLine(type.FullName); 
} 

X(typeof(tblEmployee)); 
+0

tblEmployeeはオ​​ブジェクトではないクラスなので、GetType()をオブジェクトに対して呼び出すことができるため、X(tblEmployee.GetType())は間違っています。代わりにX(typeof(tblEmployee))が正しいです。 – Alireza

+0

@Alireza申し訳ありませんが、私はそれがクラスのインスタンスだと思いました。一定。 – Rotem

7

+0

Typeではなくオブジェクトを渡す必要があります。この場合、メソッドはTClass型のオブジェクトを受け入れます。私はこれが私たちが望むものではない... – Gaurav

1
void X(Type type) 
{ 
    if(type == typeof(DesiredType)) 
    { 
      Do Some Action 
    } 
} 
関連する問題