如何从公共类/函数

时间:2017-04-22 15:27:49

标签: c# visual-studio

我猜我有一个相当简单的问题。

我想创建一个最多可计数5的函数,并为5个字符串中的每一个创建一个随机值,例如“string p1 = rnd.Next(1, 15)”<这发生在一个函数中,如下所示:

    class dice
    {
        Random rnd = new Random();


        public void rollit()
        {
            Random rnd = new Random();
        }
        public static void diceTeam()
        {
            Random rnd = new Random();
            for (int i = 0; i < 5; i++)
            {
                if (i == 1)
                {
                    //Random rnd = new Random();
                    string p1 = rnd.Next().ToString();
                }
                else if (i == 2)
                {
                    //Random rnd = new Random();
                    rnd.Next();
                }
                else if (i == 3)
                {
                    //Random rnd = new Random();
                    rnd.Next();
                }
                else if (i == 4)
                {
                    //Random rnd = new Random();
                    rnd.Next();
                }
                else if (i == 5)
                {
                    //Random rnd = new Random();
                    rnd.Next();
                }
            }
        }
    }

现在创建函数后,我想在带有标签的Windows窗体应用程序中显示随机值。我希望通过单击按钮来实现,并立即显示所有5个值,如下所示:

    private void BtnDice_Click(object sender, EventArgs e)
    {
        if (teamBox.Checked == true)
        {
            player1.Text = dice.diceTeam();
        }
    }

但它在dice.diceTeam()上给了我一个红色的下划线,这可能是因为我需要指定p1字符串,但我该怎么做?

感谢您帮助我:)

1 个答案:

答案 0 :(得分:0)

实际上你的方法的返回类型为void,而textBox则需要一个字符串。但是,我们还不清楚你想要返回什么 - 我只是假设你想要返回一个特定的随机数。然后你可以用这个:

public static string diceTeam()
{
    Random rnd = new Random();
    string res = "";
    for (int i = 0; i < 5; i++)
    {
        if (i == 1)
        {
            //Random rnd = new Random();
            res += rnd.Next().ToString();
        }
        else if (i == 2)
        {
            //Random rnd = new Random();
            res += rnd.Next().ToString();
        }
        else if (i == 3)
        {
            //Random rnd = new Random();
            res += rnd.Next().ToString();
        }
        else if (i == 4)
        {
            //Random rnd = new Random();
            res += rnd.Next().ToString();
        }
        else if (i == 5)
        {
            //Random rnd = new Random();
            res += rnd.Next().ToString();
        }
    }
    return res;
}

但是,我不明白你的代码应该做什么 - 我的意思是,为什么你要检查我有什么价值,如果你每次都做同样的事情?您可以像这样简化此代码:

public static string diceTeam() => Enumerable.Repeat(new Random(), 5)
    .Select(rnd => rnd.Next().ToString())
    .Aggregate((s0, s1) => $"{s0},{s1}");

我不确定你想达到这个目标,否则你必须澄清你的意图。

修改

在看到你的评论后,我更加困惑。你只想要p1可用吗?然后你可以这样做:

public static string diceTeam() => new Random().Next().ToString();

但如果你真的希望你的p1可用,你必须将它作为参考(我在这里使用out):

public static void diceTeam(out string p1)
{
    Random rnd = new Random();
    p1 = "";
    for (int i = 0; i < 5; i++)
    {
        if (i == 1)
        {
            //Random rnd = new Random();
            p1 = rnd.Next().ToString();
        }
        else if (i == 2)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
        else if (i == 3)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
        else if (i == 4)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
        else if (i == 5)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
    }
}

可再次简化为

public static void diceTeam(out string p1) => p1 = new Random().Next().ToString();

你必须像这样调用这个方法:

private void BtnDice_Click(object sender, EventArgs e)
{
    if (teamBox.Checked == true)
    {
        dice.diceTeam(out string result);
        player1.Text = result;
    }
}

有关out关键字的详细信息,请查看以下内容:https://msdn.microsoft.com/de-de/library/t3c3bfhx.aspx

修改

如果您确实希望p1随处可用,则必须使用全局静态变量:

public static string p1;
public static void diceTeam()
{
    p1 = "";
    Random rnd = new Random();
    for (int i = 0; i < 5; i++)
    {
        if (i == 1)
        {
            //Random rnd = new Random();
            p1 = rnd.Next().ToString();
        }
        else if (i == 2)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
        else if (i == 3)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
        else if (i == 4)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
        else if (i == 5)
        {
            //Random rnd = new Random();
            rnd.Next();
        }
    }
}

并称之为:

private void BtnDice_Click(object sender, EventArgs e)
{
    if (teamBox.Checked == true)
    {
        dice.diceTeam();
        player1.Text = dice.p1;
    }
}

并且

dice.diceTeam (out string p1, p2, p3, p4, p5);

不会工作 - 您必须使用:

dice.diceTeam (out string p1, out string p2, out string p3, out string p4, out string p5);