Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 算法建议唯一值和编辑_C#_Linq_Algorithm - Fatal编程技术网

C# 算法建议唯一值和编辑

C# 算法建议唯一值和编辑,c#,linq,algorithm,C#,Linq,Algorithm,我有一个接受字符串值的空列表 当添加元素时,我需要检查列表中是否已经存在具有相同值的字符串,如果是,则应发生异常(角色1仅在数组中存在唯一值) 现在,我想让一个用户在列表中编辑元素,如果新编辑的值是唯一的罚款,否则会发生异常 我的问题是:假设用户选择了edit元素,但实际上在发送到服务器时并没有更改值。系统应检测到元素未被更改,并接受该值(即使该值已存在于列表中) PS我简化了这个问题,实际上我使用的是MVC和EF&linq。我的问题是,我无法检查插入的值是否已在我的应用程序界面中编辑 你能帮我

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

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

现在,我想让一个用户在列表中编辑元素,如果新编辑的值是唯一的罚款,否则会发生异常

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

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

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

如果问题足够清楚或者您需要更多信息,请告诉我这是我的解决方案:

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

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

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

  • 您可能希望同步对列表/集合的访问,请保持简单:使用锁(监视器)。我会考虑读写锁,但这是复杂的事情,而你正在学习。[如果您直接与数据库引擎接口,您可以让它来处理它]。注意:如果您只有一个客户端,则无需执行此操作。。。曾经(除非单个客户端可以发送多个并发请求…:P)


  • 您使用的是什么类型的列表,是列表框还是其他类型的列表?这些值是如何添加到控件的?如何接受或中止编辑?项目数据绑定了吗?Re“我的问题是:…”:如果你在.Net中研究数据绑定,那么所有这些库都会处理。值都在数据库中,表也是如此,我只有一个文本框,可以在其中编辑一个项目。