0

私はtxtファイルを読んでいて、それをいくつかの部分に分けたいと思っています。私のTXTファイルのこの例:

"Part error(1) devic[3].data_type(2)"
"Escape error(3) device[10].data_type(12)"

最初の単語「Part」があるときに列挙型が必要な状況を実現したいのですが、スイッチでは行全体で機能する関数を呼び出したいのですが、一方で、最初の単語「Escape」がある場合、switch には他の関数を呼び出す別のケースがあります。どうすればいいですか?これまでの私のコードは次のとおりです。

class Row
{
    public enum Category { Part, Escape }
    public string Error{ get; set; }
    public string Data_Type { get; set; }
    public string Device{ get; set; }
}

public object HandleRegex(string items)
{
        Row sk = new Row();
        Regex r = new Regex(@"[.]");
        var newStr = r.Replace(items, @" ");

        switch(this.category)
        {
            case Category.Part:
                //I want to call here function HandlePart with my line as a parameter
                HandlePart(newStr);
                break;
            case Category.Escape:
                //Here I want to call Function HandleEscape for line with "Escape" word
                HandleEscape(newStr);
                break;

        }
}
4

4 に答える 4

2
public object HandleRegex(string items)
{        
    Regex r = new Regex(@"[.]");
    var newStr = r.Replace(items, @" ");
    try {
     category = (Category) new EnumConverter(typeof(Category)).ConvertFromString(items.Split(new string[]{" "},StringSplitOptions.RemoveEmptyEntries)[0]);
        }
    catch {
       throw new ArgumentException("items doesn't contain valid prefix");
    }
    switch(category)
    {
        case Category.Part:
            HandlePart(newStr);
            break;
        case Category.Escape:
            HandleEscape(newStr);
            break;
    }
 }
于 2013-08-05T06:29:17.690 に答える
1

作成Dictionary<Category, Action<string>>してから、それを使用して、カテゴリに従ってコードを呼び出すことができます。

static void Main(string[] args)
{
    var input = @"Part error(1) devic[3].data_type(2)
Escape error(3) device[10].data_type(12)";

    var functions = new Dictionary<Category, Action<string>>()
    {
        { Category.Part, HandlePart},
        { Category.Escape, HandleEscape }
    };

    foreach (var line in input.Split(new [] {Environment.NewLine }, StringSplitOptions.None))
    {
        Category category;
        if(Enum.TryParse<Category>(line.Substring(0, line.IndexOf(' ')), out category) && functions.ContainsKey(category))
            functions[category](line);
    }
}

static void HandlePart(string line)
{
    Console.WriteLine("Part handler call");
}

static void HandleEscape(string line)
{
    Console.WriteLine("Escape handler call");
}

上記のプログラムの出力:

Part handler call
Escape handler call
于 2013-08-05T06:30:54.763 に答える
1

使用できますTryParse

Category outCategory;
Enum.TryParse(this.category, out outCategory)

switch(outCategory)
        {
            case Category.Part:
                //I want to call here function HandlePart with my line as a parameter
                HandlePart(newStr);
                break;
            case Category.Escape:
                //Here I want to call Function HandleEscape for line with "Escape" word
                HandleEscape(newStr);
                break;
            default:
                // Needs to be handled
        }
于 2013-08-05T06:13:03.280 に答える
0

ファイルを1行ずつ読むと、次のことができます

string str = file.ReadLine();
string firstWord = str.substring(0, str.IndexOf(' ')).Trim().ToLower();

今、あなたはあなたができる最初の言葉を持っています

switch(firstWord){
  case "escape":// your code
  case "Part":// your code
}
于 2013-08-05T06:27:31.970 に答える