c# - 更改调用函数传递的变量的函数

标签 c#

我正在研究一个简单的 Blackjack纸牌游戏。我正在使用此代码来计算用户分数:

switch (label9.Text)
{
    case "J": playerTotal = playerTotal + 10; break;
    case "Q": playerTotal = playerTotal + 10; break;
    case "K": playerTotal = playerTotal + 10; break;
    case "A": playerTotal = playerTotal + 11; break;
    default: playerTotal = playerTotal + Convert.ToInt32(label9.Text); break;
}

但我不想一遍又一遍地写这个。所以我将这段代码放在一个函数中:

public void score(Label n, int m)
{
    switch (n.Text)
    {
        case "J": m += 10; break;
        case "Q": m += 10; break;
        case "K": m += 10; break;
        case "A": m += 11; break;
        default: m += Convert.ToInt32(n.Text); break;
    }
}

现在,问题来了:当我从另一个函数调用 score(label7, playerTotal) 时,playerTotal 的值没有改变.例如:

public void hitPlayer()
{
    //ilk hit
    if (hitCounter == 0)
    {
        label7.Text = newDeck.Last();
        playerHand[2] = newDeck.Last();
        newDeck = newDeck.Take(newDeck.Count() - 1).ToArray();
        label7.Visible = true;
        pictureBox7.Visible = true;

        score(label7, playerTotal); // <<===== 'playerTotal' does not change
        aceFound(hitCounter);
        label12.Text = playerTotal.ToString();
    }

但是,当我使用 switch/case 代码而不将其包装在一个函数中时,playerTotal 的值 确实 改变。我调用 score() 函数的方式有什么问题?

最佳答案

m 作为 ref 传递

public void score(Label n, ref int m)
{
    switch (n.Text)
    {
        case "J": m += 10; break;
        case "Q": m += 10; break;
        case "K": m += 10; break;
        case "A": m += 11; break;
        default: m += Convert.ToInt32(n.Text); break;
    }
}

根据@Andrew 的建议

public void score(Label n, ref int m)
{
    switch (n.Text)
    {
        case "J": 
        case "Q":
        case "K": m += 10; break;
        case "A": m += 11; break;
        default: m += Convert.ToInt32(n.Text); break;
    }
}

score(label7, ref playerTotal);

关于c# - 更改调用函数传递的变量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27177973/

相关文章:

c# - 将字符串从 HTTPHandler 返回到发布此 .ashx 文件的页面的最佳方法

C# 编译器在没有错误消息的情况下崩溃

c# - 除以 100 精度

c# - 找到具有给定除数的最接近的较大数字

c# - 为泛型类实现 IComparable<T> 接口(interface)以比较类型 T

c# - Dapper.Contrib 和 MiniProfiler(适用于 MySql)集成问题

c# - kentico 无法修剪字符串,错误 outOfBoundException

c# - 如何避免 MySql/net 连接器中的 "There is already an open DataReader associated with this Connection which must be closed first."?

c# - 使用网络服务将文档上传到 Sharepoint 2013 Online

c# - 在等待时,当控制权转到调用者时,它是否处理 for 循环的下一次迭代(等待返回任务吗?)?