6

出力ファイルから文字列をフェッチしていますが、これは常に または のいずれOkかになりますErr。その後、この結果をキャストするOkErr、Enum プロパティにキャストします。これで問題ありません。すべてが機能しますが、私の方法よりも優れた方法があるはずです。

フェッチされた場合に備えて 3 文字をフェッチしているので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";
 }

ありがとう

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 に答える