2013年4月22日月曜日

Lambdaの小ネタ / ハッシュ文字列(フィンガープリント)の生成

Lambda の小ネタ / 文字列から特定種類の文字以外を除去したコピーを作る」でも使いましたが、string.Concat(IEnumerable<T>)。これを知ったのはつい最近。が、これが大変使い勝手がよく、昔書いたコードのいろいろを書き直したくなる衝動に駆られます。

たとえば、バイナリデータのMD5ハッシュ文字列(いわゆるフィンガープリント)を生成するのに、こんなコードを書いてました。
static string MD5OldStyle(byte[] tgt)
{
  var sb = new StringBuilder();
  using (var md5 = MD5.Create())
  {
    foreach (var b in md5.ComputeHash(tgt))
    {
      sb.Append(b.ToString("x2"));
    }
    return sb.ToString();
  }
}

MSDNのサンプルもこんなコードになっています。しかし、ここにstring.Concatのメソッドを使うと、
static string MD5NewStyle(byte[] tgt)
{
  using(var md5 = MD5.Create())
  {
    return string.Concat(md5.ComputeHash(tgt).Select(b => b.ToString("x2")));
  }
}

おんなじことがこれでできます。なんて素敵な!

0 件のコメント:

コメントを投稿