C# VS2010编译器错误“;不可分配给参数类型T“;我认为这不是一个约束问题
我认为这与犀牛嘲弄无关 这是一个编译器错误吗 错误:注释下面的第二段代码中的一行给出了编译器警告,我不明白为什么。更让我吃惊的是,block 3可以工作 这个很好用,所以我把它转换成了一般的ActivatePresentAction2C# 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
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的参数与字段
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。