我很困扰这个问题,如果有人有任何想法,请帮忙。我有通用的方法。
public void Foo<TClass>(TClass item) where TClass : class
{ }
我想从另一个通用方法中调用此方法,但这个通用方法没有类型约束“where TClass:class”
public void Bar<T>(T item)
{
this.Foo<T>(item);
}
这行代码不能正常工作,我收到了以下错误信息:
"类型 'T' 必须是引用类型才能用作参数'TClass'"
我理解这个错误,但我的问题是 - 有没有什么C#语法可以"过滤"泛型类型"T",以便将它传递给"this.Bar"方法,如果它是一个类的话。比如...
public void Bar<T>(T item)
{
if (typeof(T).IsClass)
this.Foo<T **as class**>();
}
我意识到我可以使用反射来调用Foo,但这似乎有点作弊。在C#中,有什么方法可以在运行时将“T”传递并带上约束条件呢?
另外 - 我无法更改方法“Bar”的约束条件,因为它来自接口,所以约束条件必须与接口上的约束条件匹配。
if (typeof(T).IsClass)
呢? - Selman Genç