3

特定の順序で単一のリストに入れる必要がある 3 種類の文字列があります。「3 つのタイプ」とは、文字列を処理する方法が 3 つあることを意味します。structこのようなものを使用してリストに入れることを考えました:

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

文字列を処理方法でマークするより良い方法があるのではないでしょうか?

4

4 に答える 4

6

enumを使用できます。これにより、Intellisense とエラー チェックが提供されます。

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 に答える