【发布时间】:2014-10-01 13:52:46
【问题描述】:
我正在开发一个 C# 泛型函数。出错时,如果泛型可以new-able,返回new T(),否则返回default(T)。
如下代码:
private T Func<T>()
{
try
{
// try to do something...
}
catch (Exception exception)
{
if (T is new-able) // <---------- How to do this?
{
return new T();
}
else
{
return default(T);
}
}
}
我知道使用new T() 的用户需要where T : new()。这个问题是,如何在运行时判断这个?
【问题讨论】:
-
虽然使用反射可以实现,但这表明该方法的调用者恕我直言,这是一个相当臭的约定。你能更好地描述一下你想要做什么吗?
-
除非我弄错了,否则你不能只使用
return Activator.CreateInstance(T)吗? -
@Sayse 不,如果没有定义无参数构造函数,则会抛出异常。
-
@SriramSakthivel - 从 OP 的例子来看,我认为这会很好,但是谢谢
-
这似乎是一个非常糟糕的设计。即使这样,您的代码似乎也没有实现您的设计目标:您似乎绝对不想让任何抛出的异常在您的函数之外可见。但是如果
new T()抛出怎么办?