Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS2010编译器错误“;不可分配给参数类型T“;我认为这不是一个约束问题_C#_.net_Generics_Rhino Mocks - Fatal编程技术网

C# VS2010编译器错误“;不可分配给参数类型T“;我认为这不是一个约束问题

C# VS2010编译器错误“;不可分配给参数类型T“;我认为这不是一个约束问题,c#,.net,generics,rhino-mocks,C#,.net,Generics,Rhino Mocks,我认为这与犀牛嘲弄无关 这是一个编译器错误吗 错误:注释下面的第二段代码中的一行给出了编译器警告,我不明白为什么。更让我吃惊的是,block 3可以工作 这个很好用,所以我把它转换成了一般的ActivatePresentAction2 private void activatePresentAction1(ILITVIEWEELPER lvh) { var args=lvh.GetArgumentsForCallsMadeOn( x=>x.actionActivateItem(Arg.Is.An

我认为这与犀牛嘲弄无关

这是一个编译器错误吗

错误:注释下面的第二段代码中的一行给出了编译器警告,我不明白为什么。更让我吃惊的是,block 3可以工作

这个很好用,所以我把它转换成了一般的ActivatePresentAction2

private void activatePresentAction1(ILITVIEWEELPER lvh)
{
var args=lvh.GetArgumentsForCallsMadeOn(
x=>x.actionActivateItem(Arg.Is.Anything));
Assert.That(args.Count,Is.EqualTo(1));
Assert.That(args[0].Length,Is.EqualTo(1));
var action=(action)(args[0][0]);//提取ActivateOnItem操作
action(_pairDirEntry);//好像actionActivateItem()一样
}
这一行不能在注释行编译

private void activatePresentAction2(ILITVIEWHELPER lvh),其中T:class
{
var args=lvh.GetArgumentsForCallsMadeOn(
x=>x.actionActivateItem(Arg.Is.Anything));
Assert.That(args.Count,Is.EqualTo(1));
Assert.That(args[0].Length,Is.EqualTo(1));
var action=(action)(args[0][0]);//提取ActivateOnItem操作
// 
//错误:不可分配给HLIILIGHTED行上的参数类型T
//标记参数_pairDirEntry
// 
action(_pairDirEntry);//好像actionActivateItem()一样
}
这种对通用的更改可以正常工作

activatePresentAction3(\u stubSearchResultListViewHelper)(\u pairDirectory);
私人行动ActivatePresentAction3(ILITVIEWEELPER lvh),其中T:class
{
var args=lvh.GetArgumentsForCallsMadeOn(
x=>x.actionActivateItem(Arg.Is.Anything));
Assert.That(args.Count,Is.EqualTo(1));
Assert.That(args[0].Length,Is.EqualTo(1));
返回(操作)(args[0][0]);
}

正如编译器错误明确指出的那样,
\u pairDirEntry
不是
t
,因此您不能将其传递给接受
t
的委托,正如编译器错误明确指出的那样,
\u pairDirEntry
不是
t
,因此,你不能把它传递给一个代表,使用一个<代码> t>代码>

,为Salkes的回答提供一些更详细的信息,请考虑这个类:

class C<T>
{
    private T t; //assume that this gets assigned somehow
    private void M<T>(Action<T> action)
    {
        action(this.t);
    }
}

现在,Action的参数与字段t>/Cuth.< /P>> P>相同,为Salkes的回答提供了更多的细节,请考虑这类:

class C<T>
{
    private T t; //assume that this gets assigned somehow
    private void M<T>(Action<T> action)
    {
        action(this.t);
    }
}

现在,动作的参数与我所看到的字段
t

的类型相同.\u pairDirEntry绝对是一个t-在这种情况下,它是一个pairDirEntry,或者Action1和Action3不起作用。@RobinLuiten:
\u pairDirEntry
不能是
t
,由于
T
是该方法的通用参数,而
\u pairDirEntry
是类中的一个字段。谢谢,我一天大部分时间都在外面,所以仅回到这里,我不知道我现在迷失了什么。如果我添加了T parm的参数并传递了它,就可以了。我不太清楚为什么在写一篇帖子到这里之前,这个问题被难住了2-3个小时。从我所看到的情况来看,pairDirEntry绝对是一个T-在这种情况下,它是一个pairDirEntry,或者Action1和Action3都不起作用。@RobinLuiten:
\u pairDirEntry
不能是
T
,由于
T
是该方法的通用参数,而
\u pairDirEntry
是类中的一个字段。谢谢,我一天大部分时间都在外面,所以仅回到这里,我不知道我现在迷失了什么。如果我添加了T parm的参数并传递了它,就可以了。我不太清楚为什么在写一篇博文之前要花2-3个小时来解决这个问题。因为我有3个不同版本的IlistViewerPer和不同类型的T。因为我有3个不同版本的IlistViewerPer和不同类型的T。这个类没有任何其他泛型,该类中只有一个泛型类型,它是该方法上的类型T。该类没有任何其他泛型,该类中只有一个泛型类型,它是该方法上的类型T。