当前位置: 首页 > news >正文

杭州网站建设网站空间费用一年多少

杭州网站建设,网站空间费用一年多少,网站上qq未启用,沈阳网站建设公司报价C# 实现一个基于值相等性比较的字典Intro今天在项目里遇到一个需求#xff0c;大概是这样的我要比较两个 JSON 字符串是不是相等#xff0c;JSON 字符串其实是一个 Dictionarystring, string 但是顺序可能不同#xff0c;和上一篇 record 使用场景中的第一个需求类似… C# 实现一个基于值相等性比较的字典Intro今天在项目里遇到一个需求大概是这样的我要比较两个 JSON 字符串是不是相等JSON 字符串其实是一个 Dictionarystring, string 但是顺序可能不同和上一篇 record 使用场景中的第一个需求类似前面我们介绍过使用 record 可以比较方便的解决但是我们的项目是 .netcoreapp3.1 的不能使用 record如何比较方便的比较呢我们能否自己实现一个类似于 record 的类型基于值去比较呢于是就有了本文的探索StringValueDictioanry实现了一个基于值进行比较的字典实现代码如下实现的比较简单涉及到一些简单的知识点平时不怎么用已经忘了怎么写了通过写下面的代码又学习了一下先来看测试代码吧测试代码如下[Fact] public void EqualsTest() {var abc  new { Id  1, Name  Tom };var dic1  StringValueDictionary.FromObject(abc);var dic2  StringValueDictionary.FromObject(new Dictionarystring, object(){{Name, Tom },{Id, 1},});Assert.True(dic1  dic2);Assert.Equal(dic1, dic2); }[Fact] public void DistinctTest() {var abc  new { Id  1, Name  Tom };var dic1  StringValueDictionary.FromObject(abc);var dic2  StringValueDictionary.FromObject(new Dictionarystring, object(){{Id, 1},{Name, Tom },});var set  new HashSetStringValueDictionary();set.Add(dic1);set.Add(dic2);Assert.Single(set); }[Fact] public void CloneTest() {var dic1  StringValueDictionary.FromObject(new Dictionarystring, object(){{Id, 1},{Name, Tom }});var dic2  dic1.Clone();Assert.False(ReferenceEquals(dic1, dic2));Assert.True(dic1  dic2); }[Fact] public void ImplicitConvertTest() {var abc  new { Id  1, Name  Tom };var stringValueDictionary  StringValueDictionary.FromObject(abc);Dictionarystring, string dictionary  stringValueDictionary;Assert.Equal(stringValueDictionary.Count, dictionary.Count);var dic2  StringValueDictionary.FromObject(dictionary);Assert.Equal(dic2, stringValueDictionary);Assert.True(dic2  stringValueDictionary); } 从上面的代码可能大概能看出一些实现重写了默认的 Equals 和 GetHashCode并重载了“” 运算符并且实现了一个从 StringValueDictionary 到 Dictionary 的隐式转换来看下面的实现代码public sealed class StringValueDictionary : IEquatableStringValueDictionary {private readonly Dictionarystring, string? _dictionary  new();private StringValueDictionary(IDictionarystring, string? dictionary){foreach (var pair in dictionary){_dictionary[pair.Key]  pair.Value;}}private StringValueDictionary(StringValueDictionary dictionary){foreach (var key in dictionary.Keys){_dictionary[key]  dictionary[key];}}public static StringValueDictionary FromObject(object obj){if (obj is null) throw new ArgumentNullException(nameof(obj));if (obj is IDictionarystring, string? dictionary){return new StringValueDictionary(dictionary);}if (obj is IDictionarystring, object? dictionary2){return new StringValueDictionary(dictionary2.ToDictionary(p  p.Key, p  p.Value?.ToString()));}if (obj is StringValueDictionary dictionary3){return new StringValueDictionary(dictionary3);}return new StringValueDictionary(obj.GetType().GetProperties().ToDictionary(p  p.Name, p  p.GetValue(obj)?.ToString()));}public static StringValueDictionary FromJson(string json){Guard.NotNull(json, nameof(json));var dic  json.JsonToObjectDictionarystring, object?().ToDictionary(x  x.Key, x  x.Value?.ToString());return new StringValueDictionary(dic);}public StringValueDictionary Clone()  new(this);public int Count  _dictionary.Count;public bool ContainsKey(string key)  _dictionary.ContainsKey(key) ? _dictionary.ContainsKey(key) : throw new ArgumentOutOfRangeException(nameof(key));public string? this[string key]  _dictionary[key];public Dictionarystring, string.KeyCollection Keys  _dictionary.Keys!;public bool Equals(StringValueDictionary? other){if (other is null) return false;if (other.Count ! Count) return false;foreach (var key in _dictionary.Keys){if (!other.ContainsKey(key)){return false;}if (_dictionary[key] ! other[key]){return false;}}return true;}public override bool Equals(object obj){return Equals(obj as StringValueDictionary);}public override int GetHashCode(){var stringBuilder  new StringBuilder();foreach (var pair in _dictionary){stringBuilder.Append(${pair.Key}{pair.Value}_);}return stringBuilder.ToString().GetHashCode();}public static bool operator (StringValueDictionary? current, StringValueDictionary? other){return current?.Equals(other)  true;}public static bool operator !(StringValueDictionary? current, StringValueDictionary? other){return current?.Equals(other) ! true;}public static implicit operator Dictionarystring, string?(StringValueDictionary dictionary){return dictionary._dictionary;} } More上述代码实现的有点粗糙可能会有一些问题仅供参考以上代码基本实现了基于想要的值的相等性比较以及 Clone复制、克隆的目标实现相等性比较的时候Equals 和 GetHashCode 方法也要重写如果没有重写 GetHashCode编译器也会给出警告如果没有重写 GetHashCode 在实际在 HashSet 或者 Dictionary 里可能会出现重复 key重载运算符的时候需要一个静态方法 和 ! 是一对操作运算符如果要实现两个都要实现不能只实现其中一个implicit  也算是一个特殊的运算符巧妙的使用隐式转换可以大大简化代码的写法StackExchange.Redis 中就使用了 implicit 来实现 RedisValue 和 string 等其他常用类型的隐式转换Referenceshttps://github.com/WeihanLi/WeihanLi.Common/blob/dev/src/WeihanLi.Common/Models/StringValueDictionary.cshttps://github.com/WeihanLi/WeihanLi.Common/blob/dev/test/WeihanLi.Common.Test/ModelsTest/StringValueDictionaryTest.cs
http://www.pierceye.com/news/357889/

相关文章:

  • 贡井区建设局网站建网是什么
  • 高端大气网站模板南京网站制作西安
  • wordpress站点标题和副标题网站内容要突出什么原因
  • 网站建设公司排行杭州wordpress站外链接跳转页面
  • 哪个网站可以做行程攻略哈尔滨市建设工程招标网
  • django网站开发实例望城建设局网站
  • 住房和城乡建设网站方案网页界面设计的网络系统有哪些
  • 自己做的网站怎么设置文件下载商城app搭建
  • 好看的网站分享查域名注册详细信息查询
  • 中山网站建设招聘宜宾seo快速排名
  • 网站制作 福宁网络有限公司单页网站seo优化
  • 增城做网站站长之家域名查询大全
  • 个人网站建设报价做游戏出租的网站好
  • 珠海网站建设公司哪家好织梦网站怎么做下载地址
  • 西安商城网站建设公司宁夏住宅建设发展公司网站
  • 网站建设实现用户登录济南网站建设找老兵
  • 做网站还挣钱吗成都网站设计策划免费
  • 阿里云服务器怎么放网站百度开户渠道商哪里找
  • 网赢天下深圳网站建设建设一个小说网站
  • 北湖区网站建设哪家好什么做网站的公司好
  • 做司法亲子鉴定网站专业设计服务网站
  • 网站建设排序题wordpress菜单左对齐
  • 太原网站建设方案维护北京网站建设东轩seo
  • 网站弹屏广告怎么做的自适应网站建设特点
  • 有一个网站专门做民宿做数据可视化图的网站
  • 手机产品 网站建设网站建设费怎么记账
  • 网站页面设计好了后台如何添加构建平台还是搭建平台
  • 公司展示类网站模板中国校园网站做的比较好的学校
  • 锡山建设局网站白云做网站的公
  • 上海网站制作软件wordpress 访问控制