c# - 算法建议唯一值和编辑

标签 c# linq algorithm

我有一个接受字符串值的空列表。

添加元素时,我需要检查列表中是否已存在具有相同值的字符串,如果存在,则应发生异常(ROLE 1 仅在数组中具有唯一值)。

现在我希望用户允许编辑列表中的元素,如果新编辑的值是唯一的就好了,否则会发生异常。

我的问题是:假设用户选择了编辑元素,但在发送到服务器时实际上并没有更改值。系统应该检测到元素没有被更改并接受该值(即使它已经存在于列表中)。

PS 我简化了问题,实际上我使用的是 MVC 和 EF & linq。我的问题是我无法在我的应用程序界面中检查插入的值是否已被编辑。

你能帮我找到一个有效的算法来解决这个问题吗?谢谢

如果问题足够清楚或者您需要更多信息,请告诉我

最佳答案

这是我的解决方案:

  1. 让客户端检查文本是否被修改。如果没有,告诉服务器没有修改。如果这不可能,则让客户端发送原始文本和修改后的文本,然后服务器将能够检查它是否被修改。 (如果不是,则无需触摸您正在存储的数据)。这适用于桌面和网络环境。

  2. 最好不要使用列表,使用集合(可以是哈希集)。该集合将只允许每个项目一次。如果你不能,我想你可以继续使用这个列表。如果我理解正确的话,您正在使用数据库,那么如果您可以直接与数据库引擎交互而不是同步列表(或集合),您的应用程序将获得性能提升。

  3. 将列表/集合的版本转换为添加-删除对(而不是设置项)。在进行任何修改之前让它检查列表/集合是否包含新值。如果新值已经存在,那么您可以抛出异常或向客户端发送消息(或任何更适合您环境的方式)。

  4. 您可能想要同步对您的列表/集合的访问,保持简单:使用锁(监视器)。我会考虑读写锁,但这会使您学习时的事情变得复杂。 [如果你直接与数据库引擎交互,你可以让它处理]。注意:如果您只有一个客户端……永远不需要这样做(除非该单个客户端可以发送多个并发请求……:P)。

关于c# - 算法建议唯一值和编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11435691/

相关文章:

c# - Process.Start() 和进程树

c# - 如何在 C# 中将 List<dynamic> 转换为 List<OurClass>

c# - 由 C# 创建的 Word 文档中的表格和单元格 - 如何仅更改一个边框的颜色?

c# - 使用 LINQ 从值的哈希集中检查父项的后代

algorithm - 如何计算非凸多边形的面积?

c# - 如何设置 InputAction.CallbackContext 的新实例来测试输入?

c# - 我如何为 json 属性返回 null 而不是 "data": []

c# - 通过 LINQ 检查分隔字段中的值

algorithm - 两个排序列表相交的最快算法是什么?

java - 如何遍历 N 叉树