因为我想避免出现异常,所以我想检查一个类型是否有无参构造函数。我该怎么做?
我需要类似这样的代码:
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(类型为object)被调用。使用非泛型函数就解决了问题。
感谢大家的建设性帮助。
TT
的类型没有这样的构造函数,您仍希望代码仍然可以编译通过? - O. R. Mapper