特定の順序で単一のリストに入れる必要がある 3 種類の文字列があります。「3 つのタイプ」とは、文字列を処理する方法が 3 つあることを意味します。struct
このようなものを使用してリストに入れることを考えました:
struct Chunk
{
public char Type; // 'A', 'B' or 'C'.
public string Text;
}
文字列を処理方法でマークするより良い方法があるのではないでしょうか?
enumを使用できます。これにより、Intellisense とエラー チェックが提供されます。
struct Chunk
{
public TheType Type; // 'A', 'B' or 'C'.
public string Text;
}
enum TheType { A, B, C }
私はstruct
ここでは a を使用しません - クラスは問題なく動作するはずです。タグ付けに使用できる事前構築済みのデータ型があります。
KeyValuePair<K,V>
辞書イテレータで使用される型で、新しい型を定義せずに値とキーをペアにすることができますTuple<T1,T2>
は、任意のタイプのアイテムのペアリングに使用できます。enum
タイプを使用する代わりに、を定義することをchar
お勧めします。これにより、プログラムが読みやすくなります。
これらのチャンクをどのように使用するかによって、ポリモーフィズムがあなたの味方になるかもしれません。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
}
* できますが、おそらくもっと良い方法があります。たとえば、訪問者パターンはここで一般的に使用されます。
これは、私がまだこれらすべてに頭を悩ませようとしていたときに私が尋ねた質問です。
Array.Sort メソッドに注目してください:) http://msdn.microsoft.com/en-us/library/system.array.sort.aspx