最优雅的方法是删除字符串元素

时间:2012-12-22 08:02:33

标签: c# string

我从输出文件中提取字符串,该字符串始终为OkErr。 之后我将此结果OkErr投射到Enum属性,这没关系,一切正常,但我确信必须有比我更好的方法。

由于我在获取Ok的情况下获取3个字符,因此需要从Ok中删除第3个元素;结果

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 个答案:

答案 0 :(得分:3)

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

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

结果:

"Err" = "Err"
"Ok;" = "Ok"

答案 1 :(得分: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);

答案 2 :(得分:1)

     Enum message = Enum.Err;
     if (Regex.Match(File.ReadAllText(@"C:\Temp\SomeReport.txt"), "(ok.+?){3}", RegexOptions.Singleline).Success)
     {
        message = Enum.OK;
     }

答案 3 :(得分: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