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

6
我正在从输出文件中获取字符串,该字符串始终是OkErr之一。然后,我将此结果OkErr转换为枚举属性,这样做是可以的,一切都正常,但我相信必须有比我的方法更好的方法。
由于在获取Ok时获取了3个字符,因此我需要从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";
 }

Thanks


如果您期望字符串的精确位置为411,则只需检查“Ok”:File.ReadAllText(@“C:\ Temp \ SomeReport.txt”).Substring(411,2);。 如果消息不是“Ok”,那么很可能是错误。 听起来合理吗? - Alex Filipovici
我期望得到“Ok”或“Err”的结果。这就是我使用Substring(411, 3)的原因。 - user1765862
4个回答

3
你可以使用 String.Trim() 来删除 ';'。
string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3).TrimEnd(';')

结果:

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

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);

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

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 i = (int)state;
MessageBox.Show(i.ToString());  //should show 1 or 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接