我不認爲它與犀牛模擬相關。VS2010編譯器錯誤「不能分配給參數類型T」不是一個約束問題我相信
它是一個編譯器錯誤?
ERROR:comment下面第二段代碼中的行給出編譯器警告,我不明白爲什麼。更讓我驚訝的是,第3區的作品。
這一個工作得很好,所以我把它轉換成通用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]);
}
你爲什麼使用泛型? – SLaks 2012-01-06 02:15:34
因爲我有3個不同的版本,如果IListViewHelper與不同類型的T. –
2012-01-06 08:19:44