gpt4 book ai didi

c# - 是否有检查对象是否为内置数据类型的函数?

转载 作者:太空狗 更新时间:2023-10-29 22:13:17 24 4
gpt4 key购买 nike

我想看看一个对象是否是 builtin data type在 C# 中

如果可能的话,我不想检查所有这些。
也就是说,我不想这样做:

        Object foo = 3;
Type type_of_foo = foo.GetType();
if (type_of_foo == typeof(string))
{
...
}
else if (type_of_foo == typeof(int))
{
...
}
...

更新

我正在尝试以递归方式创建 PropertyDescriptorCollection,其中 PropertyDescriptor 类型可能不是内置值。所以我想做这样的事情(注意:这还行不通,但我正在努力):

    public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
PropertyDescriptorCollection cols = base.GetProperties(attributes);

List<PropertyDescriptor> list_of_properties_desc = CreatePDList(cols);
return new PropertyDescriptorCollection(list_of_properties_desc.ToArray());
}

private List<PropertyDescriptor> CreatePDList(PropertyDescriptorCollection dpCollection)
{
List<PropertyDescriptor> list_of_properties_desc = new List<PropertyDescriptor>();
foreach (PropertyDescriptor pd in dpCollection)
{
if (IsBulitin(pd.PropertyType))
{
list_of_properties_desc.Add(pd);
}
else
{
list_of_properties_desc.AddRange(CreatePDList(pd.GetChildProperties()));
}
}
return list_of_properties_desc;
}

// This was the orginal posted answer to my above question
private bool IsBulitin(Type inType)
{
return inType.IsPrimitive || inType == typeof(string) || inType == typeof(object);
}

最佳答案

不直接,但您可以进行以下简化检查

public bool IsBulitin(object o) {
var type = o.GetType();
return (type.IsPrimitive && type != typeof(IntPtr) && type != typeof(UIntPtr))
|| type == typeof(string)
|| type == typeof(object)
|| type == typeof(Decimal);
}

IsPrimitive 检查将捕获除字符串、对象和小数以外的所有内容。

编辑

虽然此方法有效,但我更喜欢 Jon 的解决方案。原因很简单,检查我必须对我的解决方案进行的编辑数量,因为我忘记了类型是或不是基元。更容易将它们全部明确地列在一个集合中。

关于c# - 是否有检查对象是否为内置数据类型的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1114799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com