按字符串

时间:2017-04-08 05:18:20

标签: c#

我正在进行基于文本的冒险,并希望在我的播放器类中设置function,通过接受string(对于变量)来增加班级中的变量名称)和int(金额)

class player
{
  private int stat1 = 1;
  private int stat2 = 2; 
  public void statincrease(string name, int amount)
  {
    //variable called by string// += amount  
  }
  private void main()
  {
   player.statincrease(stat2,5);
  }
}

对不起,如果我没有很好地解释我的自我,但对此的任何帮助都会非常感激

2 个答案:

答案 0 :(得分:2)

我可以告诉你这是新的,所以我会很容易。

有几种方法可以解决你所问的问题。

我的第一个建议是为你需要的每个名字创建一个方法,所以你有shieldStatIncrease(int amount)而不是字符串名称; swordStatIncrease(int amount);等

如果您不想这样做,那么您可以使用if或switch语句

public void statincrease(string name, int amount)
{
    switch(name)
    {
         case "stat1":
            //Increase stat1
            break;
         case "stat2":
            //Increase stat2
            break; //etc...
    }
}

如果这不是您正在谈论的内容,那么我道歉......让我知道,我会调整我的答案。

现在,如果您正在尝试获得真正的技术,您可以使用反射来查找属性名称并为您调整变量...但我不建议这样做;特别是不适合游戏,因为反射有更多的开销。

答案 1 :(得分:1)

这将是推荐的方法,而不是您要求的方法:创建用户可以访问和调整的公共属性。如果要强制值保持在某个特定范围内,可以在属性设置器中包含一些数据验证:

class Player
{
    public int Stat1 { get; set; }
    public int Stat2 { get; set; }

    public Player()
    {
        Stat1 = 1;
        Stat2 = 2;
    }
}

然后这个类的用户会做类似的事情:

var player = new Player();
player.Stat2 += 5; // Increase Stat2 by 5

或者,您可以保持成员私有并创建一个更改值的方法,但我认为这不太常见:

class Player
{
    private int stat1 = 1;
    private int stat2 = 2;

    public void AdjustStat2(int adjustmentIncrement)
    {
        stat2 += adjustmentIncrement;
    }
}

最后,为了回答您的原始问题,您可以让用户键入字符串并对变量名称进行匹配,但这对您的班级用户来说是一个痛苦的过程,因为他们不能只键入{{1}并获取他们有权访问的属性的智能感知列表:

Player.
相关问题