c# - 泛型类中的隐式类型参数

标签 c# generics

假设我有带强类型参数的 ViewModel 我使用 NavigationService 接受页面类型作为参数, 当不正确类型的参数传递给 Navigate 方法时。 然后我希望编译器抛出一个错误。

到目前为止,我写了以下内容:

interface IPageViewModel<TParameter>    

void Navigate<TViewModel, TParameter>(TParameter argument) 
            where TViewModel : IPageViewModel<TParameter>;

class PageWithStringParameter : IPageViewModel<string>

为什么这不起作用?

navigationService.Navigate<PageWithStringParameter>("some string");

如果我将 PageWithStringParameter 作为 TViewModel 参数传递,TParameter 必须是字符串类型,因为它实现了 IPageViewModel。 传递 TParameter 类型参数是多余的。

有什么办法,如何避免这样写:

navigationService.Navigate<PageWithStringParameter, string>("some string");

编译器错误非常令人困惑,特别是如果我还有 NavigateMethod 的无参数重载

最佳答案

方法 Navigate 有两个通用的两类参数。您只提供一个。不能部分指定类型参数。您要么指定所有这些,要么都不指定(在这种情况下所有都应该隐式解析)

关于c# - 泛型类中的隐式类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28105338/

相关文章:

c# - 在 C# 中,如果我的对象支持该接口(interface),我如何检查 T 是否属于 IInterface 类型并强制转换为该类型?

c# - 开发 Visual Studio 加载项时,除了手动测试之外,还有哪些测试选项?

c# - MVC C# 嵌套列表中的自动模型绑定(bind)

c# cookie 无法将类型 'string' 转换为 'x'

c# - 通用 ToSelectListItem 方法

c# - mailersend smtp中继设置与c#

generics - 两个耦合的 Scala 泛型类型构造函数如何作为类型参数相互引用?

c# - 通用约束需要强制转换

.net - F#:跨度、升高和底部类型(或缺少)

java - PlayFramework scala 模板泛型类型导致错误 : ']' expected but eof found. 和错误:需要标识符,但找到 $XMLSTART$<