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

ui个人作品集网站网站建设案例图片

ui个人作品集网站,网站建设案例图片,网络营销的特点主要有,专业的企业级cms建站系统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://wiki.neutronadmin.com/news/313062/

相关文章:

  • 静态网站作品我也来做外国网站购物
  • 门户网站开发 南宁合肥百度搜索优化
  • 中国网站建设公司图片个人注册商贸公司流程和费用
  • jsp 网站开发环境内蒙古微信公众号114查
  • 做网站的常识广西水利电力建设集团网站
  • 卖书的网站怎么做成都网站定制费用
  • 深圳手机端网站建设大学网站建设招标方案
  • 优秀网站网页设计分析政务网站群建设
  • 做快递单的网站会不会是骗人的信用门户网站建设规范
  • wordpress成品网站云部落手机淘宝客网站怎么做的
  • 哈尔滨企业建站系统企业网站建设趋势
  • 天河区做网站让别人做网站要注意什么
  • 杭州网站推广营销服务wordpress 斜杠结尾
  • 个人建设网站WordPress模板修改后无反应
  • 公司开个网站多少钱wordpress4.9.6 备案
  • 3g微网站是什么东莞技术好的网站建设推广
  • 梨树县住房和城乡建设局网站网站 解析
  • asp双语网站后台怎么用在西安市建设工程交易中心网站上
  • 哪些网站适合做外贸网站推广网站开发的流行架构
  • wordpress后台乱了是怎么回事南昌seo推广
  • 网络优化网络维护网络建站开发公司利用员工身份贷款买房子
  • 2003系统建网站如何做阿里巴巴网站
  • 用jsp做视频网站做网站需要视频衔接怎么做
  • 企业网站改版建议做网站至少要花多少钱
  • .net网站开发免费教程旅游网站策划方案
  • 男女做暖暖网站深圳外贸网站建设企业
  • 企业网站代运营怎么看一个网站做没做优化
  • 如何快速建立网站网站建设企业济南
  • 免费发链接的网站手机电子商务网站建设策划书
  • 云主机建网站安徽建设厅官方网站