c# - VS2010 编译器错误 "is not assignable to parameter type T"我相信不是约束问题

标签 c# .net generics rhino-mocks

我认为它与 Rhino 模拟无关。

这是编译器错误吗?

第二个代码块中 ERROR: comment 下面的行给编译器警告,我不明白为什么。更让我吃惊的是 block 3 能正常工作。

这个工作正常,所以我将它转换为 Generic ActivatePresenterAction2

private void ActivatePresenterAction1(IListViewHelper<PairDirEntry> lvh)
{
    var args = lvh.GetArgumentsForCallsMadeOn(
            x => x.ActionOnActivateItem(Arg<Action<PairDirEntry>>.Is.Anything));
    Assert.That(args.Count, Is.EqualTo(1));
    Assert.That(args[0].Length, Is.EqualTo(1));
    var action = (Action<PairDirEntry>)(args[0][0]); // extract the ActivateOnItem action 
    action(_pairDirEntry); // as if ActionOnActivateItem()
}

这个作品无法在注释行上编译

private void ActivatePresenterAction2<T>(IListViewHelper<T> lvh) where T : class
{
    var args = lvh.GetArgumentsForCallsMadeOn(
            x => x.ActionOnActivateItem(Arg<Action<T>>.Is.Anything));
    Assert.That(args.Count, Is.EqualTo(1));
    Assert.That(args[0].Length, Is.EqualTo(1));
    var action = (Action<T>)(args[0][0]); // extract the ActivateOnItem action 
    // 
    // ERROR: is not assignable to parameter type T on hliighted line
    // marking the parameter _pairDirEntry
    // 
    action(_pairDirEntry); // as if ActionOnActivateItem()
}

对通用的这种更改工作正常。

ActivatePresenterAction3(_stubSearchResultListViewHelper)(_pairDirEntry);

private Action<T> ActivatePresenterAction3<T>(IListViewHelper<T> lvh) where T : class
{
    var args = lvh.GetArgumentsForCallsMadeOn(
            x => x.ActionOnActivateItem(Arg<Action<T>>.Is.Anything));
    Assert.That(args.Count, Is.EqualTo(1));
    Assert.That(args[0].Length, Is.EqualTo(1));
    return (Action<T>)(args[0][0]);
}

最佳答案

正如编译器错误明确指出的那样,_pairDirEntry不是 T ,因此您不能将其传递给接受 T 的委托(delegate).

关于c# - VS2010 编译器错误 "is not assignable to parameter type T"我相信不是约束问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752524/

相关文章:

.net - 如何打包面向 .NET Framework 和通用 Windows 平台的 .NET 库并包含特定于平台的功能?

c# - 动态更改文本框的自动完成列表会导致 AccessViolationException,有什么建议吗?

java - List<List<String>> 和 List<Object> 不一样吗

c# - 如何计算网络速度?

c# - 什么调用和区分 "It", "Because"和 "Establish"

c# - 使用反射调用传递 lambda 表达式的泛型方法

c# - 自定义接口(interface)实现和接口(interface)c#

c# - 等待 IO 的线程会阻塞 CPU 吗?

scala - 集合中通用多态数据的上下文边界

c# - 动态 T 的通用方法