gpt4 book ai didi

c# - 交换时按引用调用在 C# 中不起作用

转载 作者:行者123 更新时间:2023-11-30 21:43:05 24 4
gpt4 key购买 nike

(首先,抱歉我的英语不好)

我正在尝试制作扑克牌游戏。
如下代码。这些功能洗牌,
好像是引用调用,最后还是不行。

private void disorderCards(PokerCardItem[] cardArray)
{
Random random = new Random();
for ( int t = 0; t < 10; t ++ )
for ( int i = 0; i < cardArray.Length; i ++ )
swapTwoCards(cardArray[i], cardArray[random.Next() % cardArray.Length]);
}

private void swapTwoCards(PokerCardItem cardA , PokerCardItem cardB)
{
PokerCardItem temp = cardA;
cardA = cardB;
cardB = temp;
}

但如果我这样写,它就会开始工作:

private void disorderCards(PokerCardItem[] cardArray)
{
Random random = new Random();
for ( int i = 0; i < cardArray.Length; i ++ )
{
int n = random.Next() % cardArray.Length;
PokerCardItem temp = cardArray[i];
cardArray[i] = cardArray[n];
cardArray[n] = temp;
}
}

这是怎么回事??谢谢!

最佳答案

您应该在参数类型前加上 ref 关键字:

private void swapTwoCards(ref PokerCardItem cardA, ref PokerCardItem cardB)
{
PokerCardItem temp = cardA;
cardA = cardB;
cardB = temp;
}

如果您不这样做,您只需传递相应引用的副本,当您调用如下方法时:

 swapTwoCards(cardArray[i], cardArray[random.Next() % cardArray.Length]);

您只能对传递的对象的属性进行操作。您不能更改 cardA 指向或 cardB 指向的引用。

虽然您包含 ref 关键字,但您可以实现您想要的。

此外,您必须按以下方式进行上述调用:

swapTwoCards(ref cardArray[i], ref cardArray[random.Next() % cardArray.Length]);

现在您通过引用传递,您可以更改实际引用,这就是您在方法主体中实际执行的操作。

更多阅读请看here .

关于c# - 交换时按引用调用在 C# 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42039600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com