2012-12-28 75 views
5

我需要类方法中的类名,例如X.同时,我不想松散类型安全性,我不会允许其他开发人员通过字符串(类名)的方法。类型安全地将一个类名称传递给一个方法

事情是这样的:

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

你正在寻找的是一个叫做Type,其中包含关于类的元数据。

您可以在任何object实例上使用typeof(class).GetType()方法。

不同的是,typeof是静态解析的,GetType在运行时解析。

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

X(typeof(tblEmployee)); 
+0

由于tblEmployee是一个类而不是对象,X(tblEmployee.GetType())是错误的,因为可以在对象上调用GetType()。相反,X(typeof(tblEmployee))是正确的。 – Alireza

+0

@Alireza对不起,我认为这是该班的一个实例。固定。 – Rotem

7

你可以使用泛型和FullName property of Type,因为这样的:

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

,然后TClass应用约束上按您的要求。

+0

我们需要传递类型而不是对象。在这种情况下,该方法将接受TClass类型的对象。我不是这个,我们想要的是...... – Gaurav

1
void X(Type type) 
{ 
    if(type == typeof(DesiredType)) 
    { 
      Do Some Action 
    } 
} 
相关问题