如何使用索引器访问枚举项并为其分配数组字符串以供显示?

时间:2009-03-23 02:38:26

标签: c#

已编辑:2009年3月23日更新。见底部的其余部分。我仍然遇到索引器问题。再帮助或例子真的会帮助我。

  
      
  1. 写一个包含所有枚举的类MyCourses   您正在参加的课程。   这个枚举应该嵌套在里面   你的课程MyCourses。你的班   还应该有一个数组字段   提供简短描述(作为   每个课程的字符串)。写   一个索引器,它带你的一个   列举的课程作为索引和   返回的String描述   当然。

  2.   
  3. 编写一个包含提供索引器的MyFriends类   访问朋友的名字。

  4.   
namespace IT274_Unit4Project
{

    public class MyCourses
    {

        // enumeration that contains an enumeration of all the courses that 
        // student is currently enrolled in
       public enum CourseName {IT274= 0,CS210 = 1}

        // array field that provides short description for each of classes, 
        // returns string description of the course
        private String[] courseDescription = 
         {"Intermediate C#: Teaches intermediate elements of C# programming and software design",
          "Career Development Strategies: Teaches principles for career progression, resume preparation, and overall self anaylsis"};

        // indexer that takes one of the enumerated courses as an index 
        // and returns the String description of the course
         public String this[CourseName index]
           {
             get
             {
                 if (index == 1)
                     return courseDescription[0];
                 else
                     return courseDescription[1];
             }
               set
               {
                   if (index == 1)
                       courseDescription[0] = value;
                   else
                       courseDescription[1] = value;
               }
         }

    }


}//end public class MyCourses

我正在处理这个家庭作业项目并且无法理解文本,解释如何正确获取枚举的访问值,然后将字符串数组值应用于它。你能帮我理解一下吗?我们正在使用的文本非常难以编写,以便初学者理解,所以我在这里有点自己。我已经编写了第一部分,但需要一些关于访问枚举值和分配的帮助,我想我很接近,但是不明白如何正确获取和设置这个值。

请不要向我提供直接的代码答案,除非MSDN样式说明是一般化的并且不是我的项目特有的。即:

 public class MyClass
{ string field1;
string field2;

//properties
public string Value1
get etc...

谢谢!

2 个答案:

答案 0 :(得分:2)

首先,枚举的基类型必须是数值类型,因此您不能使用基类型字符串进行枚举。以下内容不会编译:

public enum CourseName
{
    Class1 = "IT274-01AU: Intermediate C#", 
    Class2 = "CS210-06AU: Career Development Strategies"
}

因此,将其更改为使用int的默认基本类型。像下面这样的东西会做,但你可以根据需要更改名称(例如,你可能想要使用课程名称而不是代码)。还要记住,在枚举中应尽可能使用有意义的名称。

public enum Courses
{
    IT274_01AU, 
    CS210_06AU
}

(我知道你说你不想要特定的代码示例,但我认为这一点比任何解释都清楚地说明了我的观点。)


其次,您使用索引器处于正确的轨道上,但您必须考虑如何将枚举与字符串描述数组相关联。请记住,枚举只不过是一组有限的美化(命名)数字。使用上述Courses枚举,您有两个名为IT274_01AUCS210_06AU的值。因此,在索引器中,您必须将每个值映射到字符串描述。有多种方法可以做到,但最简单的方法是switch语句,例如:

switch (myEnum)
{
case value1:
    return string1;
case value2:
    return string2;
}

然而,另一个选择是将枚举值显式映射到其基类型,并使用基类型索引到数组中。例如,如果你有枚举

public enum Enumerations
{
    value1 = 0,
    value2 = 1
}

然后您可以使用myArray[(int)myEnum]直接索引到数组中。这可能是有用的,并且是稍微更先进但更少行代码且可以说更容易理解的方法。

答案 1 :(得分:1)

(抵制编写代码的冲动)

首先,枚举是一个命名的整数列表,并且(根据MSDN)枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong。

另外,请记住,courseDescription是一个字符串数组,索引器的目的是为您提供该数组的索引(即。[0]返回第一个字符串,[1]返回第二个字符串,等等)。