如何在 C# 中检查变量是否为 class

how to check whether a variable is a class or not in c#

我有一个函数获取 object 作为参数

例如:

public static void doSomthingWithObject(object obj)
{
 (.....)
}

我想检查我得到的对象是 class 还是一个简单的变量(例如,如果它需要一个构造函数来创建),如果是这样,我想获取那个 class 的所有属性=13=] 所以代码看起来像这样:

public static void doSomthingWithObject(object obj)
{
 if(objectIsClass())
  {
    object[] arr = obj.getAllPropeties
 (.....)
  }
  else
  {
 (.....)
  }
}

这可能吗?

编辑: 人们发现我对 class 变量和简单变量的定义令人困惑。明确地说,"simple variable" 是一个只能保存一个值的变量,要访问该值,您只需编写“= var”,而 "class variable" 可以保存多个值(除非它有 1- 0 属性),并且可以使用 get 访问它的每个值,例如:= obj.prop(除非没有 get)这种类型变量中的每个值都由 属性,并定义新的 class 属性 必须使用 new 关键字

我认为应该这样做:

    public static void DoSomthingWithObject(Object obj)
    {
        if (!obj.GetType().IsPrimitive)
        {
            Console.WriteLine("This is a class.");
            var properties = obj.GetType().GetProperties();
            foreach (var p in properties) {
                Console.WriteLine(p);
            }
        }
        else
        {
            Console.WriteLine("This is NOT a class.");
        }
    }

不完全确定 "get all properties" 是什么意思。但是此代码将检查 indata 是否是 non-primitive class 的实例,并为您提供所有属性的名称。也许这是一个开始。

在 C# 中,您看到的所有内容都是 class 或结构(例如 Int 是结构)。

所以问题归结为两件事,

  1. 你想知道所有没有无参数构造函数的类型吗(比如int没有) 为此,

    bool ObjectIsClass(object o)
    {
       return  o.GetType().GetConstructor(new Type[0])!=null;
    }
    
  2. 是否要查找原始类型

    bool IsPrimitive(object o)
    {
       return o.GetType().IsPrimitive;
    }