【问题标题】:Compare open generic parameter with open generic interface type比较开放的泛型参数和开放的泛型接口类型
【发布时间】:2015-09-24 11:53:39
【问题描述】:

是否可以(在c# 中)比较开放的泛型参数,例如T 在:

public void CompareMethod<T>() { ... }

具有开放的泛型接口(或类)的类型?
这是一个示例界面:

public interface IExample<T> { }

然后以某种方式在方法内部像这样比较它们:

public void CompareMethod<T>()
{
    if (typeof(IExample<>) == typeof(T))
    {
        //execute
    }
}

if 正文在调用这样的方法时不会执行:

CompareMethod<IExample<object>>();

重要我事先并不知道CompareMethod的open泛型参数中会输入哪些封闭类型。

【问题讨论】:

  • 如果你需要比较它的T参数,你为什么要使用泛型类型参数?你能澄清一下你想要做什么吗?
  • 我同意@YuvalItzchakov,这听起来像XY Problem
  • 我在应用了 MVVM 模式的 WPF 应用程序中使用它。我有一项服务,它通过提供 ViewModel 的类型来显示窗口/对话框。这些 ViewModel 实现了一些接口。我已经为这项服务分配了一项职责,它还对其中一些视图模型进行了一些额外的工作。但这项额外的工作仅适用于一组选择性的接口。

标签: c# generics reflection


【解决方案1】:

您需要在T 上调用GetGenericTypeDefinition() 才能与IExample&lt;&gt; 进行比较:

public void CompareMethod<T>()
{
    if (typeof(T).IsGenericType && 
        typeof(T).GetGenericTypeDefinition() == typeof(IExample<>)) {
    {
        //execute
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多