试着告诉字符串

时间:2016-10-04 02:47:04

标签: c# enums

我有一个部分的枚举列表:

public enum Parts
{
    Wall = (int)'#',
    Empty = (int)'-',
    Player = (int)'@',
    Goal = (int)'.',
    Block = (int)'$',
    BlockOnGoal = (int)'*',
    PlayerOnGoal = (int)'+'
};

我有一个字符串

string Level = "####\n#  #\n#@  #\n####";

所以字符串中的所有项都在枚举列表中 如果我然后调用函数

public Parts WhatsAt(int row, int column)
    {
        return Parts.Wall;// Teachers comment but idk what he means "WRONG - but now no exception!  should look up Level or some better data structure"
    }

因此,当调用该函数时,它会将字符串拆分为\ n,然后使用输入到函数中,就像地图上的坐标一样,以确定其中的特定字符。
左上角是行:0,列:0
右下角是行:4,列:4

####
#  #
#@ #
####

如何使函数返回指定给定坐标的部件名称
例如

Parts actual = WhatsAt(0, 2);

实际上将成为Wall,就像枚举列表中的#表示一样 感谢您提前提供任何帮助

2 个答案:

答案 0 :(得分:1)

如果我找对你,你可以试试这个:

public static Parts WhatsAt(int row, int column)
{
    var rows = Level.Split('\n');
    return (Parts)rows[row][column];
}

答案 1 :(得分:0)

你有没有试过任何?如果你不能试图编写一些代码,那么与老师讨论会更好,因为这意味着你错过了他试图传达的一些关键概念。

与此同时:

你的问题确实有两个部分(至少):

  1. 如何查找给定charrow值的column值。
  2. 如何将char值转换为Parts枚举值。 (旁白:除非enum具有enum属性,否则将[Flags]类型名称设为单数而不是复数是一种.NET编码约定,并且此约定对恕我直言是有用的一,Partenum类型而言比Parts 更好。
  3. 关于第一点,您似乎已经意识到,您可以使用string.Split()方法从原始值中获取string值数组:

    string[] rows = Level.Split('\n');
    

    您可以使用传入的row变量索引此数组,以获取该行的正确string值。在该string值中,您可以使用column变量为该位置索引所需的char值:

    char location = rows[row][column];
    

    关于第二点,转换回Parts类型是一个简单的演员:

    Parts part = (Parts)location;
    

    这不会更改正在使用的实际值,而是会将location值重新解释为Parts值,并存储在part变量中。

    有了这个,你应该拥有编写WhatsAt()方法所需的一切。如果您愿意,以上所有内容甚至可以表示为单个表达式:

    (Parts)Level.Split('\n')[row][column]