为了账号安全,请及时绑定邮箱和手机立即绑定

如何观察不同类的整数

如何观察不同类的整数

C#
白衣染霜花 2023-08-13 16:05:04
我试图将用户输入从文本框转换为整数(在 c# 中),然后从具有该整数索引的数组中输出一个值。这是我的代码的一小部分: public Form1(){ InitializeComponent();        string[] Cmaj = new string [7];            Cmaj[1] = "C";            Cmaj[2] = "D";            Cmaj[3] = "E";            Cmaj[4] = "F";            Cmaj[5] = "G";            Cmaj[6] = "A";            Cmaj[7] = "B";       int roman = int.Parse(textBox3.Text);       textBox4.Text = Cmaj[roman];}但每次运行此命令时,我都会收到有关“int roman = int.Parse(textBox3.Text);”的错误 (下面列出)。我最初使用的是 Convert.ToInt32 而不是 int.Parse,但我看到了有关此主题的另一个问题,该问题说使用解析而不是转换。然而,这并没有太大改变。我应该怎么办?错误:mscorlib.dll 中发生“System.FormatException”类型的未处理异常附加信息:输入字符串的格式不正确。
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

如果无法访问 Player 类,一种选择是仅在设定的时间间隔内检查所有玩家的 Life 变量的值。


您需要在 Game 类中保留局部变量,以跟踪 Life 变量之前设置的内容,但是每当您注意到 Life 变量的值之一发生更改时,您都可以在 Game 中执行您需要的任何代码类,这将为您提供与事件处理程序基本相同的行为(尽管可能不那么有效)。


class Game {    


    List<Player> playerList;

    ArrayList lifeValues;

    System.Timers.Timer lifeCheckTimer;


    Game() {

        playerList = new List<Player>();

        //add all players that have been instantiated to the above list here

        lifeValues = new ArrayList();

        //add all the player.Life values to the above list here

        //these will need to be added in the same order

        lifeCheckTimer = new System.Timers.Timer();

        lifeCheckTimer.Elapsed += new ElapsedEventHandler(lifeCheckElapsed);

        //you can change the 500 (0.5 seconds) below to whatever interval you want to 

        //check for a change in players life values (in milliseconds)

        lifeCheckTimer.Interval = 500;

        lifeCheckTimer.Enabled = true;

    }


    private static void lifeCheckElapsed(object source, ElapsedEventArgs e)

    {

        for (int i = 0; i < playerList.Count(); i ++) {

            if (((Player)playerList[i]).Life != lifeValues[i])

                OnPlayerLifeChange();

            lifeValues[i] = ((Player)playerList[i]).Life;

        }

    }

}


查看完整回答
反对 回复 2023-08-13
?
慕仙森

TA贡献1827条经验 获得超7个赞

一种常见的方法是在 Player 类中实现 INotifyPropertyChanged 接口,将 Life 从字段更改为属性,并从 setter 引发 PropertyChanged 事件。


class Player : INotofyPropertyChanged

{

    private int _life;

    public int Life

    {

        get { return _life; }

        set { _life = value; OnPropertyChanged("Life"); }

    }


    ....

}

然后游戏可以订阅所有玩家的 PropertyChanged 事件并做出相应的反应。


查看完整回答
反对 回复 2023-08-13
?
ibeautiful

TA贡献1993条经验 获得超5个赞

编写 Player 类的人需要添加一个公共方法来检查变量的任何更新Life。那么你只需要使用该方法即可。

如果这个人没有编写这样的方法,那么你就无法访问它(这就是为什么封装很重要,否则任何人都可以访问不应该访问的东西)


查看完整回答
反对 回复 2023-08-13
  • 3 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信