我有一个标识客户的字符串。在我的网站上,我为没有设置个人资料图片的客户提供了3个不同的图像。我想将这些图像中的一个随机关联到客户,但不会在会话之间更改图像。
使用GetHashCode是否有任何问题,如下面的代码所示?
switch (CustomerIdString.GetHashCode() % 3)
{
case 0:
return "NoProfileImage0.png";
break;
case 1:
return "NoProfileImage1.png";
break;
case 2:
default:
return "NoProfileImage2.png";
break;
}
我了解还有其他解决方案,例如 -
但我喜欢使用GetHashCode()的简单性(没有添加库,没有数据库代码)。
答案 0 :(得分:1)
我发现你的示例代码在我的应用程序中很有用,因为我正在做类似的事情。但是,我发现我需要在GetHashCode周围使用Math.Abs,因为它有时会返回负数:
Math.Abs(String.GetHashCode()) Mod 3
(道歉,我的回复是在vb.net而不是c#)
答案 1 :(得分:1)
相关:Can I depend on the values of GetHashCode() to be consistent?
基本上,不能保证string.GetHashCode
在.NET框架版本中保持相同。
您可能需要考虑使用存在于.NET之外的更广泛范围内的哈希函数(但仍在.NET中实现!)并且具有相关的规范,例如MD5。这将使您的软件更具便携性和弹性。
有关如何获取MD5哈希的信息,请参阅相关内容:MD5 Hash From String
答案 2 :(得分:0)
我没有看到任何问题,虽然它根本不是随机的,但它将始终是基于CustomerIdString
的值的相同图像。