ServiceStack.Redis之RedisClientList.Remove
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ServiceStack.Redis之RedisClientList.Remove,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1504字,纯文字阅读大概需要3分钟。
内容图文
![ServiceStack.Redis之RedisClientList.Remove](/upload/InfoBanner/zyjiaocheng/556/4213b3ffdac54d388b42e085f66bf517.jpg)
Q:使用 IRedisTypedClientT.List[ RepositoryKey ].Remove(Item) 无效! A: public bool Remove(T item) { var index = this.IndexOf(item); if (index != -1) { this.RemoveAt(index); return true; } return false; } 可以看到 1.首先使用 IndexOf 获得
Q:使用 IRedisTypedClient
A:
public bool Remove(T item) { var index = this.IndexOf(item); if (index != -1) { this.RemoveAt(index); return true; } return false; }
可以看到
1.首先使用 IndexOf 获得数据的下标索引。
2.通过 RemoveAt 删除 索引位置的数据。
IndexOf 代码如下:
public int IndexOf(T item) { //TODO: replace with native implementation when exists var i = 0; foreach (var existingItem in this) { if (Equals(existingItem, item)) return i; i++; } return -1; }
其中Equals 作为对象的比较,这里请查看 Object.Equals 方法 。【它确定两个对象是否表示同一对象引用。 如果成功,该方法返回 true.】
所以Equals(existingItem, item) 恒等于 false => 返回值始终为 -1=>RemoveAt(-1)=>始终会删除失败。
那么我们如何解决呢?
这里有2个方法:
1.我们重载比较对象的 Equals 方法
public override bool Equals(Object obj) { if (obj == null || !(obj is EntityClass)) return false; else return (this.Id== ((EntityClass)obj).Id); } public override int GetHashCode() { return this.Id.GetHashCode(); }
那么对象之间的比较其实就是 对象 Id 值之间的比较。
2. 跳过 Remove方法,直接使用RemoveAt方法。
获得对象数据在List中的索引位置,直接调用RemoveAt方法,删除对象数据!
转载请注明:Ahoo » ServiceStack.Redis 之 RedisClientList
内容总结
以上是互联网集市为您收集整理的ServiceStack.Redis之RedisClientList.Remove全部内容,希望文章能够帮你解决ServiceStack.Redis之RedisClientList.Remove所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。