【问题标题】:How to set properties in the same class?如何在同一个类中设置属性?
【发布时间】:2015-07-16 00:37:58
【问题描述】:

我在设置某些变量的值时遇到了困难。在我的 GameController 类中,我希望用户输入玩家的数量。然后我希望我的代码创建一个数组来保存每个玩家的分数。

class Program
{
    static void Main(string[] args)
    {
        Game GC = new Game();
        GC.GetNumberPlayers();
        GC.SetInitialScores();
    }               
}

class Game
{
    private int players;
    private int[] scores;
    private string[] playerNames;

    public int Players
    {
        get { return players; }
        set { players = value; ; }
    }

    public int[] Scores
    {
        get { return scores; }
        set { scores = value; }
    }

    public int GetNumberPlayers()
    {
        string playersString;
        Console.WriteLine("Enter number of players");
        playersString = Console.ReadLine();
        Int32.TryParse(playersString, out players);
        return players;
    }

    public int[] SetInitialScores()
    {
        for (int i = 0; i < players; i++ )
        {
            scores[i] = 0;
        }
        return scores;
    }
}

【问题讨论】:

  • 不要认为这会产生很大的影响,但您的Players set{} 中有一个额外的;
  • @Ben 在 K&R C 时代,一个单独的分号是无效的。我相信 C# 保持了这一点。
  • 并不真正相关,但隐藏全局 GC 静态类成员(可用于操作垃圾收集器)可能不是最明智的命名选择。

标签: c# properties


【解决方案1】:

一些事情:

GetNumberPlayers 返回一个integer,由于将其称为GC.GetNumberPlayers();,因此您没有对它做任何事情

如果您想获得GetNumberPlayers() 的值,则需要像int numPlayers = GC.GetNumberPlayers(); 一样调用它

由于您在尝试解析中设置了players 值,因此实际上没有任何理由返回它,因为您仅在内部使用它(或者如果您通过将其分配给上面的变量来在外部使用它)

您的函数SetInitialScores 也是如此,但还有一个问题。数组需要将它们的长度声明为其初始化的一部分。您根本没有初始化数组,因此遇到了运行时错误。您可以根据在播放器中输入的值初始化数组,如下所示:

public void SetInitialScores()
{
    scores = new int[players];

    for (int i = 0; i < players; i++ )
    {
        scores[i] = 0;
    }
}

这是一个 Fiddle 演示:https://dotnetfiddle.net/JmHsLQ

以及完全修改后的代码:

public class Program
{
    public static void Main(string[] args)
    {
        Game GC = new Game();
        var players = GC.GetNumberPlayers();
        var scores = GC.SetInitialScores();

        Console.WriteLine("You entered {0} players!", players);

        Console.WriteLine("Printing scores");
        foreach (int val in scores)
        {
            Console.WriteLine(val);
        }

    }               
}

public class Game
{
    private int players = 0;
    private int[] scores;
    private string[] playerNames;

    public int Players
    {
        get { return players; }
        set { players = value; ; }
    }

    public int[] Scores
    {
        get { return scores; }
        set { scores = value; }
    }

    public int GetNumberPlayers()
    {
        string playersString;
        Console.WriteLine("Enter number of players");
        playersString = Console.ReadLine();
        Int32.TryParse(playersString, out players);
        return players;
    }

    public int[] SetInitialScores()
    {
        scores = new int[players];

        for (int i = 0; i < players; i++ )
        {
            scores[i] = 0;
        }

        return scores;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2010-12-04
    • 2021-05-16
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多