试图调用函数<t>其中T:TheClass,new()在哪里T:class

时间:2016-05-17 14:32:08

标签: c# generics

这是我需要做的简化版本。在目前的状态下,我想做的事情没有意义。然而,它以一种简单的方式显示了问题。

我需要在 function1&lt; T&gt;()中调用 function2&lt; T&gt;(),其中T:TheClass,new(),其中T:class

Something<T> function1<T>() where T : class {
  //cannot call function2 directly due to compile error
  //return function2<T>();

  //What I need as a pseudo code
  if (T is TheClass and T is new())
    return Then function2<T>()
  else
    throw Exception
} 

Something<T> function2<T>() where T : TheClass, new() {
  //...
} 

2 个答案:

答案 0 :(得分:2)

UPDATE MyTable SET Text = N'אבגד' where Id > 50 限制无法在运行时进行验证(与可以使用new() / as的继承不同) - 所以没有C#构造可以写入从is调用function2并保持强类型。

您唯一的选择是通过反射构建方法而不是调用它。见How do I use reflection to call a generic method?

答案 1 :(得分:0)

你真的不能这样做。我猜测function2正在new T()进行T : classfunction1约束new()可能无法做到这一点。

您可以尝试删除ConstructorInfo约束并使用针对 Type type = typeof(T); ConstructorInfo ctor = type.GetConstructor(new Type[0]); if(ctor == null) throw new InvalidOperationException(); object instance = ctor.Invoke(new object[0]); 的检查手动执行此操作,并从中获取实例:

{{1}}