c# 有没有一种方法可以确定对象值是否是基本类型,如整数和字符串或 class 或结构

c# Is there a way to determine if an object value is a base type like ints and strings or like class or structs

我想制作一个序列化程序,为此我必须检查当前对象的类型是否可以包含多个值。 (我所说的基本类型是字符串和整数)

我知道互联网上有很多很棒的序列化程序,但我这样做是为了挑战,但其中大多数都没有我想要的功能

我猜整数和字符串也是类但我想要的是这样的:

bool CheckIfBaseType(object value)  { return //check }

我认为除了将每个基本类型保存在一个数组中之外没有合适的方法来做到这一点

编辑:

我想我可以使用反射来检查是否有任何 public 变量,但是有更好的方法吗?

编辑 2:

好的,我会试着解释一下, 所以我真正想要的是一个可以检测一个值是否可以容纳另一个值的函数,这样我就可以检查子值

算法解释:

    if(objectCanHoldValues(value))
    {
        //switch the target object to the child object and check if 
        it can hold a value (this part is done)
    }

当我说您的解决方案不起作用时,请不要不喜欢。 我对 Stack overflow 很陌生,如果我犯了错误,我很抱歉

这就是您要找的东西?

public static class TypeExtensions
{

    private static HashSet<Type> otherScalarTypes = new HashSet<Type>
    {
        typeof(string), typeof(Guid), typeof(DateTime),
        typeof(DateTimeOffset)
    };

    public static bool IsScalar(this Type type)
    {
        return type.IsPrimitive || otherScalarTypes.Contains(type);
    }
}

请注意,Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、IntPtr、UIntPtr、Char、Double 和 Single 是基本类型。

然后你可以检查它是否是“基本类型”:

if (obj.GetType().IsScalar()) 
{

}

使用 .Net 反射检查 IsPrimitive、IsArray 或其他类型