3

我有三种类型的字符串,我需要按特定顺序将它们放入单个列表中。“三种类型”是指处理字符串的三种方式。我想用struct这样的东西放在列表中:

struct Chunk
{
    public char Type;   // 'A', 'B' or 'C'.
    public string Text;
}

也许有更好的方法来标记字符串应该如何处理?

4

4 回答 4

6

您可以使用枚举。这将为您提供智能感知和错误检查。

struct Chunk
{
    public TheType Type;   // 'A', 'B' or 'C'.
    public string Text;
}

enum TheType { A, B, C }
于 2013-08-05T22:27:30.833 回答
4

我不会在struct这里使用 a - 一个类应该就可以了。您可以使用预先构建的数据类型进行标记:

  • KeyValuePair<K,V>,字典迭代器中使用的类型,允许您将值与键配对,而无需定义新类型
  • 从 .NET 4.0 开始,您可以Tuple<T1,T2>用于配对任意类型的项目。

我建议为类型定义一个enum而不是使用char:这应该使您的程序具有更好的可读性。

于 2013-08-05T22:30:12.867 回答
3

根据您将如何使用这些块,多态性可能是您的朋友。该Type块实际上携带您的“ Type”信息:

public abstract class Chunk {
   public string Text { get; private set; }

   protected Chunk(string text) {
      Text = text;
   }
}

public class ATypeChunk : Chunk {
   public ATypeChunk(string text) : base(text) { }
}

public class BTypeChunk : Chunk {
   public BTypeChunk(string text) : base(text) { }
}

从某个来源创建块:

public IEnumerable<Chunk> GetChunks(string dataToBeParsed) {
   while ( /* data to be parsed */ ) {

      // Determine chunk type

      switch ( /* some indicator of chunk type */ ) {
         case 'A':
            yield return new ATypeChunk(chunkText);
         case 'B':
            yield return new BTypeChunk(chunkText);
      }     
   }
}

然后,这是您在使用它们时不做的事情*:

public UseChunk(Chunk chunk) {
   if (chunk is ATypeChunk)
      // Do something A specific
   else if (chunk is BTypeChunk)
      // Do something B specific
}

* 好的,你可以,但可能有更好的方法。例如,访问者模式在这里有一个常见的用法。

当我仍在试图解决所有这些问题时,我问了一个问题:

于 2013-08-05T22:27:33.683 回答
-2

关注 Array.Sort 方法:) http://msdn.microsoft.com/en-us/library/system.array.sort.aspx

于 2013-08-05T22:28:32.093 回答