17

Stackoverflow を読んだ後、DateTime の形式をチェックする場合は DateTime.TryParse を使用する必要があります。いくつかの正規表現を試してみると、多くのフォーマットをカバーするために長くて厄介なように見えます。

しかし、TryParse には "out" パラメーターが必要であり、検証形式のチェックを行いたいだけなので、実際の結果は必要ありません。

したがって、「出力」結果を保持する変数が残っており、それに対して何もする必要はありません。out パラメータを実行する必要がないようにする方法はありますか?

そのため、この警告を取り除き、変数が飛び回るのをやめました。

4

6 に答える 6

30

C#7.0 (2016 年 8 月以降) では、out var コンストラクトを使用して、後続のコードで新しい var を無視することができます。

bool success = DateTime.TryParse(value, out var result);

結果の値を本当に気にしない場合は、破棄を使用してください。

bool success = DateTime.TryParse(value, out _);
于 2017-07-26T14:25:48.497 に答える
22

いいえ。メインフローからノイズを排除するために、どこかのメソッドでラップします。

  bool IsValidDate(string value)
  {
     DateTime result;
     return DateTime.TryParse(value, out result); //result is stored, but you only care about the return value of TryParse()
  }
于 2009-09-12T06:33:31.107 に答える
7

実際にこれを行うことをお勧めしているわけではありませんが、単一のヘルパー クラスを使用して、すべての出力パラメーターに対してこれを簡単にすることができます。

public static class OutHelper<T>
{
    [ThreadStatic]
    public static T Ignored;
}

次に、次のように呼び出すことができます。

if (DateTime.TryParse(text, out OutHelper<DateTime>.Ignored))

それは恐ろしいことです。公開された変更可能なフィールドを使用し、アプリケーションが悪意のあるコードで実行されている場合、解析した最後の値にそのコードがアクセスできるようにします...しかし、動作するはずです:)

于 2009-09-12T08:10:41.217 に答える
4

いいえ。変数を削除することはできませんが、コンパイラの警告も表示されないはずです。

out変数を「使用」するのと同じように変数を渡す。そのため、コンパイラは警告を発行しません。

于 2009-09-12T06:35:35.953 に答える
4

.NET 3以降を使用している場合は、いつでも拡張メソッドを作成できますか?

public static bool IsValidDate(this string value)
{
  DateTime date = DateTime.Null;
  return DateTime.TryParse(value, out date);
}

[メソッド名をより適切な名前に変更するために編集]

于 2009-09-12T06:40:34.477 に答える
1

TryParseより良いオプションです。それは無駄になっている単なる変数です。その他のオプションにはConvert.ToDateTime()、try-catchブロック内での使用が含まれます。しかし、try-catchブロックは重いことを意図しているため、これも効率的ではありません。次のオプションは正規表現です。これはより良い解決策です。これにより、他の結果と比較してすぐに結果が得られると思います。

キム・グレスマンが言ったように、あなたは非常にうまくメソッドをラップすることができます...

于 2009-09-12T06:40:43.383 に答える