试图告诉枚举字符是在一个字符串
我有零件的枚举列表中的特定位置的内容:试图告诉枚举字符是在一个字符串
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);
实际然后会成为华尔街的那是什么#中的枚举意味着
感谢所有帮助提前
如果我有你的权利,你可以试试这个:
public static Parts WhatsAt(int row, int column)
{
var rows = Level.Split('\n');
return (Parts)rows[row][column];
}
有了学校相关的问题,最好是解释答案,而不是仅仅为学生做作业。最好编写最简单,最有效的代码。即当一个简单的索引器足以满足时,不使用LINQ的'ElementAt()'方法,而当可以直接转换为所讨论的'enum'类型时,不会将中间转换为'int'。 –
你的技术细节是正确的。 –
是的,我认为该会徽是不是问题只是没有返回它作为一个枚举“(部分)”类型 – 1seanr
你试过什么东西?如果你无法做出足够的努力去编写代码,那么与老师讨论会更好,因为这意味着你错过了一些他正试图传达的重要概念。
其间:
实际上有两个部分组成(至少)你的问题:
- 如何找到一个给定
row
和column
值char
值。 - 如何将
char
值转换为Parts
枚举值。 (另外:除非enum
具有[Flags]
属性,这是一个.NET编码习惯使enum
类型名称单数,而不是复数,并且此惯例是恕我直言有用的。因此Part
将是您的enum
类型更好的名称比Parts
)。
关于第一点,你似乎已经意识到,你可以使用string.Split()
方法从原始获得string
值的数组:
string[] rows = Level.Split('\n');
你可以索引此数组与row
变量传入以获取该行的正确值string
值。内string
值,然后可以用户column
变量索引为位置所需char
值:
char location = rows[row][column];
关于第二点,转换回Parts
类型是一个简单的转换:
Parts part = (Parts)location;
这不会更改正在使用的实际值,而是会将location
值重新解释为存储在part
变量中的Parts
值。
因此,您应该拥有编写您的WhatsAt()
方法所需的一切。上述所有,如果你喜欢,甚至可以表示为一个单一的表达:
(Parts)Level.Split('\n')[row][column]
那么,一旦你有一个字符(采用分体式,[]和子),你*会*投你的性格为int,并然后将其转换为您的枚举类型,但这将是一个黑客(因为您假设枚举值等于字符值)。一个更好的数据结构将是一个'Dictionary'将字符映射到零件。 –