我有一个函数获取一个
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# 中,您看到的所有内容要么是类,要么是结构,(例如 Int 是结构)。
所以问题归结为两件事,
你想知道所有没有无参数构造函数的类型吗(比如 int 没有) 为此,
bool ObjectIsClass(object o)
{
return o.GetType().GetConstructor(new Type[0])!=null;
}
你想寻找原始类型吗
bool IsPrimitive(object o)
{
return o.GetType().IsPrimitive;
}
我认为应该这样做:
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 是否是非原始类的实例,并为您提供所有属性的名称。也许这是一个开始。