我有一个接受字符串值的空列表。
当添加一个元素时,我需要检查列表中是否已存在具有相同值的字符串,如果是,则应发生异常(ROLE 1只是数组中的唯一值)。
现在我希望用户在列表中设置编辑元素,如果新编辑的值是唯一的,则应该发生异常。
我的问题是:让我们想象用户选择编辑元素,但实际上在发送到服务器时不会更改值。系统应检测到元素未被更改并接受该值(即使列表中已存在该值)。
PS我简化了问题,我实际上是在使用MVC和EF& LINQ。我的问题是我无法检查我的应用程序界面中是否已编辑插入的值。
你能帮我找一个有效的算法来解决这个问题吗?感谢
如果问题足够明确或者您需要更多信息,请告诉我
答案 0 :(得分:1)
这是我的解决方案:
让客户端检查文本是否被修改。如果没有,请告诉服务器没有修改。如果这是不可能的,客户端同时发送orinigial文本和修改后的文本,然后服务器将能够检查它是否被修改。 (如果不是那么就没有必要触摸你正在存储的数据)。这适用于桌面和网络环境。
首选不使用列表,使用集合(可能是哈希集)。该套装只允许每个项目一次。万一你不能猜我可以继续使用列表。如果我正确理解您正在使用数据库,那么如果您可以直接与数据库引擎连接而不是同步列表(或设置),那么您的应用程序将会提升性能。
将list / set的版本转换为add-remove对(而不是设置项目)。在进行任何修改之前,请检查列表/集是否包含新值。如果新值已经存在,那么您可以抛出异常或向客户发送消息(或者更适合您的环境)。
您可能希望同步对列表/集的访问权限,保持简单:使用锁(监控)。我会考虑读写锁,但这会让你在学习时变得复杂。 [如果你直接与数据库引擎接口,你可以让它处理它]。注意:如果您只有一个客户端,则不需要这样做(除非该单个客户端可以发送多个并发请求......:P)。