在列表中协变交换两个元素

3

您能否按照协变的方式为通用列表编写一个交换程序?以下是一个无法工作的示例交换程序:

public static void Swap(List<IComparable> list, int pos1, int pos2)
{
    IComparable temp = list[pos1];
    list[pos1] = list[pos2];
    list[pos2] = temp;
}

这里调用 Swap(new List<int>{1,2}, 0, 1) 是行不通的,因为这个版本的 Swap 不是协变的。


5
如果您添加一些示例代码,甚至是伪代码,那么理解您所说的内容将会更加容易。 - Konrad Kokosa
3
并不是每个编程问题都与代码有关,要适应这一点。 - poke
@DarrellPlank 请修改您的问题,而不是将代码作为评论发布。 - poke
@poke 这并不会让我变得更勤奋。顺便说一下,看到原始帖子真的很好。不管它是什么,我相信可以用一行LINQ或类似的方法解决。 - Federico Berasategui
@poke - 抱歉 - 我没有经常使用StackOverflow。谢谢你的提示! - Darrell Plank
显示剩余2条评论
1个回答

3
这对您是否有效?
public static void Swap<T>(this List<T> list, int pos1, int pos2)
{
    T tmp = list[pos1];
    list[pos1] = list[pos2];
    list[pos2] = tmp;

}

这可以让你指定类型并使交换成为可能。

非常好的回答,jsobo。我太蠢了,没有认出来。下次再遇到这种情况我会准备得更好!再次感谢! - Darrell Plank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接