src/DotNetCommon.Core/HashHelper.cs

(开头部分) 20KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Text;
using DotNetCommon.Extensions;

namespace DotNetCommon
{
    /// <summary>
    /// 用于生成哈希码的Helper类。
    /// </summary>
    /// <remarks>可以将多个对象或一个数组内的全部对象做为一个整体(顺序也影响hashcode计算值)计算hashcode</remarks>
    public static class HashHelper
    {
        /// <summary>
        /// 一个相对较大的质数。
        /// </summary>
        private const int PrimeNumber = 486187739;

        /// <summary>
        /// 31 是移位和减法,因此非常快。
        /// </summary>
        private const int DefaultHashValue = 31;

        /// <summary>
        /// 使用给定的参数获取哈希值。
        /// </summary>
        /// <param name="param">要进行计算哈希值的对象</param>
        public static int GetHashCode<T>(T param) => param.IsDefault() ? 0 : param.GetHashCode();

        /// <summary>
        /// 使用给定的参数获取哈希值。
        /// </summary>
        /// <remarks>
        /// 参照: <see href="http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode"/>
        /// </remarks>
        /// <param name="param1">要进行计算哈希值的对象</param>
        /// <param name="param2">要进行计算哈希值的对象</param>
        public static int GetHashCode<T1, T2>(T1 param1, T2 param2)
        {
            unchecked
            {
                var hash = DefaultHashValue;
                hash = hash * PrimeNumber + GetHashCode(param1);
                return hash * PrimeNumber + GetHashCode(param2);
            }
        }

        /// <summary>
        /// 使用给定的参数获取哈希值。
        /// </summary>
        /// <remarks>
        /// 参见 <see href="@ http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode"/>
        /// </remarks>
        /// <param name="param1">要进行计算哈希值的对象</param>
        /// <param name="param2">要进行计算哈希值的对象</param>
        /// <param name="param3">要进行计算哈希值的对象</param>
        public static int GetHashCode<T1, T2, T3>(T1 param1, T2 param2, T3 param3)
        {
            unchecked
            {
后面还有 341 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。