如何检查无参数构造函数的类型?

港铁

因为我想避免异常,所以我想检查一个类型是否具有无参数构造函数。我该如何实现?

我需要这样的东西:

bool HasDefaultConstructor<TT>(TT source)
{
   return ???;
}

编辑:我想创建与源相同类型的对象,如果它没有默认构造函数,我想改用default(TT)。

我现在所拥有的是:

        static TT CreateObject<TT>(TT source)
    {
        try
        {
            if(!HasDefaultConstructor<TT>(source))
            {
                return default(TT);
            }
            return (TT)Activator.CreateInstance(source.GetType());
        }
        catch(Exception ex)
        {
            Trace.WriteLine("Exception catched!\r\n" + ex);
        }
        return default(TT);
    }
    static bool HasDefaultConstructor<TT>(TT source)
    {
        ConstructorInfo c = typeof(TT).GetConstructor(new Type[] { });

        return c != null;
    }

但是检查使我成真并且CreateInstance引发异常

没有无参数的构造函数

解:

bool HasDefaultConstructor(Type t)
{
   return t.GetConstructor(Type.EmptyTypes) != null;
}

涉及到许多递归函数和迭代,而在这种方式下,错误的泛型函数HasDefaultConstructor(带有类型对象)被调用。使用非泛型函数可以解决问题。

谢谢大家的建设性帮助。

阿迪·莱斯特

GetConstructor(Type.EmptyTypes) 将返回无参数构造函数;如果不存在,则返回null,因此您可以拥有:

return typeof(TT).GetConstructor(Type.EmptyTypes) != null;

编辑

我猜你的问题是,TTsource.GetType()实际上是两个不同的类型。source.GetType()可能源自TT但没有无参数构造函数。因此,您实际需要做的是检查source.GetType()

bool HasDefaultConstructor(Type t)
{
   return t.GetConstructor(Type.EmptyTypes) != null;
}

if(!HasDefaultConstructor(source.GetType()))
    ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查参数化构造函数参数的类型?

如何在流类型接口上对类的构造函数参数进行严格的类型检查?

EnumConverter构造函数如何获取类型参数

TypeScript如何检查无限递归类型的相等性?

如何检查无形类型是否为HList的成员?

Haskell如何类型检查无限递归值?

Python SQLAlchemy检查无类型

如何检查函数参数和类型

如何检查没有参数的类的构造函数

EF Core通过null检查无法达到构造函数的目的

类型构造函数参数推断

如何检查传递给可变参数函数的参数的类型

如何为GHCI强制执行类型构造函数参数

如何防止构造函数在C ++中强制转换参数类型?

Scala如何确定TreeSet构造函数的隐式类型参数

如何使用对象类型作为方法/构造函数的参数?

如何检查参数类型?

获取函数/类构造函数的参数类型

如何使用 kotlinpoet 生成具有单个类型参数的 Kotlin“Unit”类型的构造函数参数?

如何采用任何构造函数类型并将其转换为接受相同参数的函数类型?

检查传递给 `AttributeUsageAttribute` 构造函数的参数

空检查构造函数参数的常规方法

如何构造std :: variant类型对象,其本身的Templated和构造函数转发参数

如何从构造函数获取参数?

如何验证构造函数参数?

如何破坏构造函数参数?

JS - URLSearchParam 构造函数参数类型问题

在方法/构造函数中限制“类型”参数

泛型类型作为构造函数参数