Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除字符串元素的最优雅方法_C#_String - Fatal编程技术网

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

C# 删除字符串元素的最优雅方法,c#,string,C#,String,我正在从输出文件中提取字符串,该字符串将始终为Ok或Err。 之后,我将这个结果Ok或Err转换为Enum属性,这很好,一切都正常,但我确信一定有比我更好的方法 由于我在提取Ok时提取了3个字符,因此我需要从Ok中删除第三个元素;结果 string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3); if (message == "Ok;") // `;` character should be re

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

由于我在提取
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";
 }

谢谢

您可以使用
String.Trim()
删除“;”如果有

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

"Err" = "Err"
"Ok;" = "Ok"
您可以这样做:

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

如果您有以下枚举

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

如果需要字符串的精确位置411,则只能检查
Ok
File.ReadAllText(@“C:\Temp\SomeReport.txt”).Substring(411,2)。如果消息不是
Ok
,则可能是错误。有意义吗?我期待的结果不是Ok就是Err。这就是我使用子字符串(411,3)的方式;
     Enum message = Enum.Err;
     if (Regex.Match(File.ReadAllText(@"C:\Temp\SomeReport.txt"), "(ok.+?){3}", RegexOptions.Singleline).Success)
     {
        message = Enum.OK;
     }