我很迷戀這個,所以如果任何人有任何想法。我有泛型方法在運行時添加通用約束?
public void Foo<TClass>(TClass item) where TClass : class
{ }
我想從另一個調用泛型方法這種方法,但這種方法一般不具有類型約束「其中TClass:類」
public void Bar<T>(T item)
{
this.Foo<T>(item);
}
這並未「T工作,我得到的錯誤
‘類型‘T’必須是引用類型,以便將它作爲參數‘TClass’’
我的理解。但我的問題是這樣的 - 有什麼我可以用C#語法做的事情,以便「過濾」泛型類型「T」,如果它是一個類,將它傳遞給「this.Bar」。像....
public void Bar<T>(T item)
{
if (typeof(T).IsClass)
this.Foo<T **as class**>();
}
我意識到我可以使用反射來調用Foo,但這只是看起來像作弊。有什麼我可以用C#做到在運行時將約束傳遞給「T」?
而且 - 我不能因爲它從一個接口,這樣的約束有約束相匹配的接口上
您是否將「this.Foo();」 ? –
Euphoric
well spotted - edited :) – jcharlesworthuk
那麼你爲什麼不使用'if(typeof(T).IsClass)'? –