C# 重写(override)Equals 和 GetHashCode

Equals 和 GetHashCode Equals 每个实现都必须遵循以下约定: 自反性(Reflexive): x.Equals(x) 必须返回 true 对称性(Symmetric): x.Equals(y) 为 true 时,y.Equals(x) 也为 true 传递性(Transitive): 对于任何非 null 的应用值 x, y 和 z,如果 x.Equals(y) 返回 true,并且 y.Equals(z) 也返回true,那么 x.Equals(z) 必须返回 true 一致性(Consistence): 如果多次将对象与另一个对象比较,结果始终相同。只要未修改 x 和 y 的应用对象,x.Equals(y) 连续调用 x.Equals(y) 返回相同的值 非null(Non-null): 如果 x 不是 null,y 为 null,则 x.Equals(y) 必须为 false GetHashCode: 两个相等对象根据 equals 方法比较时相等,那么这两个对象中任意一个对象的 GetHashCode 方法都必须产生同样的整数 在我们未对对象进行修改时,多次调用 GetHashCode 使用返回同一个整数。在同一个应用程序中多次执行,每次执行返回的整数可以不一致 如果两个对象根据 Equals 方法比较不相等时,那么调用这两个对象中任意一个对象的 GetHashCode 方法,不一同的整数。但不同的对象,产生不同整数,有可能提高散列表的性能 以上内容摘自@冯辉 的博客: https://www....

April 2, 2022 · 2 分钟 · Remo

Asp.Net Core 6 与 SignalR 使用 JWT 身份验证

JWT 是什么? 这一点网上有很多的描述了,在此就不多赘述。总之,JWT 的 Token 通常由三部分组成:Header,Payload 和 Signature. Header 中包含了该 Token 所使用的签名算法;Payload 中则含有一些需要传递的信息;Signature 则是对 Header 和 Payload 的签名,用以校验前两部分有没有被篡改。 在 Asp.Net Core Web Api 中集成 JWT 安装 Nuget 包 首选我们需要安装三个 Nuget 包,分别是: Microsoft.AspNetCore.Authentication.JwtBearer Microsoft.IdentityModel.Tokens; System.IdentityModel.Tokens.Jwt; JWT 相关参数配置 在appsettings.json文件中,我们添加以下配置: "JwtConfiguration": { "AccessSecret": "123456", "RefreshSecret": "654321", "Issuer": "this", "Audience": "that", "AccessExpiration": 3600, "RefreshExpiration": 2592000, "ClockSkew": 60 } 以上配置中,具体字段名和内容可以自行修改。 然后我们新建一个类,用于反序列化配置内容: /// <summary> /// JWT Token配置 /// </summary> public class JwtConfiguration { /// <summary> /// AccessToken密钥 /// </summary> public string AccessSecret { get; set; } = string....

March 9, 2022 · 4 分钟 · Remo

React使用Day.js通过Vite发布后报错

问题描述 最近在React项目中使用了 Day.js 来处理需要在 Ant Design 列表中显示的一个时间数据,在本地开发过程中一直没出问题,vite build发布以后,列表每次加载数据都会报错:TypeError: $ is not a function以及Error: Minified React error #31;. 后面发现将使用 Day.js 相关方法注释后,加载数据就恢复正常了。经过搜索,发现这篇博文,虽然文中的报错信息和我遇到的不一样,但是解决方式是相同的。 解决方式 不要使用 import dayjs from 'dayjs'或者 import * as dayjs from 'dayjs' 方式引入 Day.js ,应当改用: import dayjs from 'dayjs/esm/index.js' 这样修改后,就可以正常使用了。

January 12, 2022 · 1 分钟 · Remo

ASP.NET 6 修改 WebRoot 路径

问题 最近的项目中需要修改 Web Root 路径,按照老方法发现报异常,于是 Google 得知相关方法在 ASP.NET 6 中有所修改。 代码 ASP.NET 5 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { //这里指定新位置 webBuilder.UseWebRoot("webroot") .UseStartup<Startup>(); }); ASP.NET 6 var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, //这里指定新位置,也可以使用绝对路径 WebRootPath = "webroot" }); var app = builder.Build(); 若要修改 Content Root 路径也可以在这里一并修改。 总结 根据微软官方文档解释: Content 根目录是指向以下内容的基路径: 托管应用的可执行文件 (.exe)。 构成应用程序的已编译程序集 (.dll)。 应用使用的内容文件,例如:...

December 23, 2021 · 1 分钟 · Remo

使用Windows Terminal进行SSH登录

安装Windows Terminal 注意:Windows Terminal 需要 Windows 10 1903 (build 18362) 或更新版本 通过微软商店 (Microsoft Store) 安装【官方推荐】 在微软商店搜索“Windows Terminal”安装即可 在 Github 上下载 在 Terminal 官方仓库的 Releases page 页面下载。选择最新版本的Microsoft.WindowsTerminalPreview_<版本号>_8wekyb3d8bbwe.msixbundle下载,双击安装即可。 通过 Chocolatey 安装(非官方) 在已安装 Chocolatey 的情况下,执行命令: choco install microsoft-windows-terminal 其他更多方式请参见 Windows Terminal 官方 GitHub 仓库 设置SSH登录 首先进入 Windows Terminal 设置界面: 在设置解密左侧最下方点击“打开JSON文件”,这时系统会调用默认文本编辑器打开配置文件。 在文本编辑器中找到 profiles => list 节点: 在list中添加一个节点: { "guid": "{a10c1013-d3f4-479c-bb69-7899e7597871}", "hidden": false, "name": "my_server", "commandline" : "ssh -i <username>@<ip/url> -p<ssh端口号>", "icon": "<icon path>" } guid:连接表示,全局唯一,可以通过Online GUID / UUID Generator生成 hidden:是否隐藏,默认即可 name:在标签栏显示的名称 commandline:命令行命令,请将尖括号相关内容替换成自己的 icon:标签栏显示的图标,可以是本地图片,也可以是网络图片 如果你要连接的远程设备是通过账号密码登录的话,那么此时保存配置并重新打开 Windows Terminal 即可使用。...

December 13, 2021 · 1 分钟 · Remo