将泛型用于泛型方法,强制您在方法中添加泛型的类型参数,尽管它可能无关紧要。
添加参数也会导致代码分析警告: CA1004:通用方法应提供类型参数
有没有办法在不相关时忽略类型?
示例:
public void Method<TUseful, TIrrelevant>(TUseful genericObject) where TUseful : UsefulConcrete<TIrrelevant>
我也尝试过:
public void Method<TUseful>(TUseful genericObject) where TUseful : UsefulConcrete<object> // With UsefulConcrete<in/out T>
和
public void Method<TUseful>(TUseful genericObject) where TUseful : UsefulConcrete<>
但它没有帮助。
答案 0 :(得分:1)
CA1004
只是一个警告,告诉你不可能直接从方法参数推断出你的方法的泛型类型。调用它时,您必须明确提供类型:
this.Method<Type1,Type2>(someObject);
您可以忽略此警告并使用您的方法,或在方法参数中添加具有相应泛型类型的参数。
在您的具体情况下,我更愿意为UsefulConcrete<>
创建基础非泛型类,并在其上创建约束TUseful
:
public void Method<TUseful>(TUseful genericObject) where TUseful : UsefulConcrete
答案 1 :(得分:0)
TIrrelevant
类型参数非常相关。如果没有此参数,您将无法创建UsefulConcrete
泛型类。
如果您知道UsefulConcrete
的类型参数,请使用它:UsefulConcrete<MyType>