嵌套泛型中不相关的类型

时间:2015-03-15 14:52:13

标签: c# .net generics

将泛型用于泛​​型方法,强制您在方法中添加泛型的类型参数,尽管它可能无关紧要。

添加参数也会导致代码分析警告:     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<>

但它没有帮助。

2 个答案:

答案 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>