如何在c#中检查一个变量是否是一个类

问题描述 投票:0回答:2

我有一个函数获取一个

object
作为参数

例如:

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

我想检查我得到的对象是一个类还是一个简单的变量(例如,如果它需要一个构造函数来创建),如果是这样,我想得到那个的所有属性

object
所以代码看起来像像那样:

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

这可能吗?

编辑: 人们发现我对类变量和简单变量的定义令人困惑。明确地说,“简单变量”是一个只能保存一个值的变量,要访问这个值你需要简单地写“= var”,而“类变量”可以保存多个值(除非它有 1-0 个属性), 并且它的每个值都可以使用

get
ex:
= obj.prop
(除非没有
get
) 这种类型变量中的每个值都由一个属性保存,并定义一个新的类属性
new
必须使用关键字

c# variables types new-operator
2个回答
1
投票

在 C# 中,您看到的所有内容要么是类,要么是结构,(例如 Int 是结构)。

所以问题归结为两件事,

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

    bool ObjectIsClass(object o)
    {
       return  o.GetType().GetConstructor(new Type[0])!=null;
    }
    
  2. 你想寻找原始类型吗

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

-1
投票

我认为应该这样做:

    public static void DoSomethingWithObject(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.");
        }
    }

不完全确定“获取所有属性”是什么意思。但是此代码将检查 indata 是否是非原始类的实例,并为您提供所有属性的名称。也许这是一个开始。

© www.soinside.com 2019 - 2024. All rights reserved.