6

我正在从输出文件中获取字符串,该字符串始终为Okor Err。之后,我将这个结果OkErrEnum 属性转换,这没关系,一切正常,但我确信一定有比我更好的方法。

由于我要获取 3 个字符以防万一,Ok我需要从中删除第三个元素Ok;结果。

string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3);
 if (message == "Ok;") // `;` character should be removed in case that Ok is fetched
 {
    message = "Ok";
 }

谢谢

4

4 回答 4

3

您可以只使用String.Trim()删除 ';' 如果它在那里。

string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3).TrimEnd(';')

结果:

"Err" = "Err"
"Ok;" = "Ok"
于 2012-12-22T08:12:55.363 回答
1

你可以这样做:

switch (message)
{
  case "Err":
    SomeProperty = EnumName.Err;
    break;

  case "Ok;":
    SomeProperty = EnumName.Ok;
    break;

  default:
    throw new Exception("Unexpected file contents: " + message);
}

如果你不喜欢这样,你可以TryParse在修剪分号后使用:

EnumName result;
if (Enum.TryParse(message.TrimEnd(';'), out result))
  SomePropery = result;
else
  throw new Exception("Unexpected file contents: " + message);
于 2012-12-22T08:23:21.857 回答
1
     Enum message = Enum.Err;
     if (Regex.Match(File.ReadAllText(@"C:\Temp\SomeReport.txt"), "(ok.+?){3}", RegexOptions.Singleline).Success)
     {
        message = Enum.OK;
     }
于 2012-12-22T08:35:20.410 回答
0

如果您有以下枚举

public enum State
{
    Err, OK
}

使用修剪,如 sa_adam213 所说,您可以通过这种方式将其转换为您的枚举:

string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3).TrimEnd(';')
State state = (State)Enum.Parse(typeof(State),message);
MessageBox.Show(state.ToString());  //should show OK or Err

并将其转换为int:

int i = (int)state;
MessageBox.Show(i.ToString());  //should show 1 or 0
于 2012-12-22T08:25:21.187 回答