因为我想避免异常,所以我想检查一个类型是否具有无参数构造函数。我该如何实现?
我需要这样的东西:
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;
编辑
我猜你的问题是,TT
和source.GetType()
实际上是两个不同的类型。source.GetType()
可能源自TT
但没有无参数构造函数。因此,您实际需要做的是检查source.GetType()
:
bool HasDefaultConstructor(Type t)
{
return t.GetConstructor(Type.EmptyTypes) != null;
}
if(!HasDefaultConstructor(source.GetType()))
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句