{"id":2646,"date":"2025-06-12T12:50:08","date_gmt":"2025-06-12T04:50:08","guid":{"rendered":"https:\/\/www.clonefactor.com\/wordpress\/?p=2646"},"modified":"2025-06-12T12:50:08","modified_gmt":"2025-06-12T04:50:08","slug":"detect-changed-element-between-2-list","status":"publish","type":"post","link":"https:\/\/www.clonefactor.com\/wordpress\/program\/c\/2646\/","title":{"rendered":"detect changed element between 2 list"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">private void DetectChange&lt;T&gt;(List&lt;T&gt; from, List&lt;T&gt; to,\n    out List&lt;T&gt; added, out List&lt;T&gt; removed)\n    where T : IEquatable&lt;T&gt;\n{\n    _Except(from, to, out added);\n    _Except(to, from, out removed);\n\n    void _Except&lt;TT&gt;(List&lt;TT&gt; from, List&lt;TT&gt; to, out List&lt;TT&gt; diff)\n        where TT : IEquatable&lt;TT&gt;\n    {\n        diff = new List&lt;TT&gt;();\n        var contain = false;\n        for (int i = 0; i &lt; from.Count; ++i)\n        {\n            contain = false;\n            for (int k = 0; k &lt; to.Count &amp;&amp; !contain; ++k)\n            {\n                if (from[i].Equals(to[k]))\n                {\n                    contain = true;\n                }\n            }\n\n            if (!contain)\n            {\n                diff.Add(from[i]);\n            }\n        }\n    }\n}<\/pre>\n<p>\u00a0<\/p>\n\n\n\n<p style=\"text-align: left;\">\u66f4\u7c21\u55ae\u7684\u5beb\u6cd5\u662f\u7528 Linq\u00a0<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">var from = new List&lt;object&gt;();\nvar to = new List&lt;object&gt;();\n\nvar added = from.Except(to).ToList();\nvar removed = to.Except(from).ToList();<\/pre>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>private void DetectChange&lt;T&gt;(List&lt;T&gt; f &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,106],"tags":[],"class_list":["post-2646","post","type-post","status-publish","format-standard","hentry","category-c","category-devlog"],"_links":{"self":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/2646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/comments?post=2646"}],"version-history":[{"count":1,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/2646\/revisions"}],"predecessor-version":[{"id":2647,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/2646\/revisions\/2647"}],"wp:attachment":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/media?parent=2646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/categories?post=2646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/tags?post=2646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}