【问题标题】:Type-safely pass a class name to a method类型安全地将类名传递给方法
【发布时间】:2012-12-13 18:04:01
【问题描述】:

我需要方法中的类名,例如 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

【问题讨论】:

    标签: c# class type-safety


    【解决方案1】:

    您正在寻找的是一个名为Type,其中包含有关类的元数据。

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

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

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

    【讨论】:

    • 由于 tblEmployee 是一个类而不是一个对象,X(tblEmployee.GetType()) 是错误的,因为 GetType() 可以在对象上调用。相反 X(typeof(tblEmployee)) 是正确的。
    • @Alireza 抱歉,我认为这是该类的一个实例。固定。
    【解决方案2】:

    您可以使用泛型和FullName property of Type,例如:

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

    然后根据您的要求在TClass 上应用约束。

    【讨论】:

    • 我们需要传递类型而不是对象。在这种情况下,该方法将接受 TClass 类型的对象。我不认为这是我们想要的......
    【解决方案3】:
    void X(Type type)
    {
        if(type == typeof(DesiredType))
        {
              Do Some Action
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多