我有三种类型的字符串,我需要按特定的顺序放入一个List中。 “三种类型”我的意思是有三种处理字符串的方法。
我想用这样的struct
放在列表中:
struct Chunk
{
public char Type; // 'A', 'B' or 'C'.
public string Text;
}
也许有一种更好的方法来标记字符串应该如何处理?
答案 0 :(得分:6)
您可以使用enum。这将为您提供智能感知和错误检查。
struct Chunk
{
public TheType Type; // 'A', 'B' or 'C'.
public string Text;
}
enum TheType { A, B, C }
答案 1 :(得分:4)
我不会在这里使用struct
- 一个班级应该做得很好。您可以使用预先构建的数据类型进行标记:
KeyValuePair<K,V>
,字典迭代器中使用的类型,允许您将值与键配对而不定义新类型Tuple<T1,T2>
配对任意类型的项目。我建议为该类型定义一个enum
而不是char
:这应该会为您的程序提供更好的可读性。
答案 2 :(得分: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
}
*好的,你可以,但可能有更好的方法。例如,Visitor Pattern在这里有一个共同的用法。
当我还在努力解决所有这些问题时,我问了一个问题:
答案 3 :(得分:-2)
关注Array.Sort方法:) http://msdn.microsoft.com/en-us/library/system.array.sort.aspx