我从输出文件中提取字符串,该字符串始终为Ok
或Err
。
之后我将此结果Ok
或Err
投射到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";
}
谢谢
答案 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