1

顧客を識別する文字列があります。私のウェブサイトには、プロフィール写真を設定していない顧客向けに 3 つの異なる画像があります。これらの画像の 1 つを顧客にランダムに関連付けたいのですが、セッション間で画像を変更したくありません。

次のコードのように、GetHashCode の使用に問題はありますか?

switch (CustomerIdString.GetHashCode() % 3)
{
    case 0:
        return "NoProfileImage0.png";
        break;

    case 1:
        return "NoProfileImage1.png";
        break;

    case 2:
    default:
        return "NoProfileImage2.png";
        break;
}

次のような他の解決策があることを理解しています-

  • より良いハッシュ ライブラリを使用する
  • 乱数ジェネレーターでシードとして顧客 ID を使用する
  • 顧客レコードに対してイメージ名を永続化する

しかし、私は GetHashCode() を使用する単純さ (追加のライブラリーも DB コードもありません) が気に入っています。

4

3 に答える 3

1

関連: GetHashCode() の値が一貫していることに依存できますか?

基本的にstring.GetHashCode、.NET フレームワークのバージョン間で同じであるとは限りません。

.NET 以外のより広い範囲に存在し (まだ .NET に実装されています!)、MD5 などの関連する仕様を持つハッシュ関数の使用を検討することをお勧めします。これにより、ソフトウェアの移植性と回復力が向上します。

MD5 ハッシュを取得する方法については、関連項目を参照してください:文字列からの MD5 ハッシュ

于 2013-05-28T19:34:41.597 に答える
1

私は似たようなことをしているので、私のアプリケーションでサンプルコードが役立つことがわかりました。ただし、負の数が返されることがあるため、GetHashCode の周りで Math.Abs​​ を使用する必要があることがわかりました。

Math.Abs(String.GetHashCode()) Mod 3

(私の返信が c# ではなく vb.net であることをお詫びします)

于 2013-05-28T19:00:19.143 に答える
0

ランダムではありませんが、 の値に基づいて常に同じ画像になりますCustomerIdString

于 2013-05-28T19:29:59.253 に答える