{"id":1729619,"user_name":null,"score":0,"text":"@somekind: \ndzi\u0119ki za przyk\u0142ad\n\ngwoli \u015bcis\u0142o\u015bci - to co doda\u0142em to nie zast\u0119puje \"starego\" API ale jest jako now\u0105 funkcjonalno\u015bci\u0105 \nMamy dane po parsowaniu XML i mo\u017cna sobie robi\u0107 taki komparator\nnp magazyn bie\u017ce co\u015b innego pod uwage, produkcja co\u015b innego, projektanci co\u015b innego itd\n\nprzechodz\u0105c do rzeczy to tak - na pewno nie da si\u0119 zrobi\u0107 jakie\u015b super narz\u0119dzia dla ka\u017cdego, bo jak kluczy mamy 20 to pisa\u0107 20xByKey\nalbo jak klucze przychodz\u0105 \"z zewn\u0105trz\" itp itd\n\nco do samego przyk\u0142adu\nmo\u017ce to g\u0142upie, ale chcia\u0142bym zobaczy\u0107 kod kt\u00f3ry robi takiego buildera\n\n1) w cpp jest co\u015b takiego jak varadic templates, z tego co wiem c# nie ma takiej dobroci\n **.ByKey(x => x.Prop1, x => x.Prop2)** jak takie co\u015b zbudowa\u0107 jak nie poprzez  .ByKey<TProp1, TProp2>(x => x.Prop1, x => x.Prop2) \nprzy sporej kluczy to ju\u017c zaczyna si\u0119 robi\u0107 problem i zostaje tylko ByKey<TProp> (chyba \u017ce czego\u015b nie wiem)\n\n2) mamy taki fragment\n**beforeCollection.CompareWith(afterCollection)ByKey(x => x.Prop1, x => x.Prop2)**\nza kolej\u0105 List<T>..CompareWith(List<T>).ByKey(T=>T.Prop)\n\nczyli przechodzimy z listy do typu listy - potem ju\u017c w kodzie aby uruchomi\u0107 t\u0105 funkcj\u0119 to trzeba sk\u0105d pobra\u0107 te propertysy\nmamy jaki\u015b **DoCompare(List<T> before, List<T> after)** ale funkcj\u0119 by Key trzeba b\u0119dzie wywo\u0142a\u0107 ju\u017c tak \nFunByKey(before[0])\/\/ czy tam after - jeden pies\n\nto jest troch\u0119 takie zaskakuj\u0105ce w kodzie - niby nic, nie takie rzeczy si\u0119 widzia\u0142o, ale jak kto\u015b to zobaczy to si\u0119 zdziwi czemu before(after) czemu [0] itd\n\nKonkluduj\u0105c\nbudowa API to nie jest taka prosta sprawa, tu niby nieskoplikowany projekcik, ot taka se por\u00f3wnywarka, a jak zrobi\u0107 aby zaspokaja\u0142a potrrzeby wynikaj\u0105ce z r\u00f3\u017cnych mo\u017cliwych przypadk\u00f3w u\u017cycia to ju\u017c nie takie oczywiste (istnieje mo\u017cliwo\u015b\u0107, \u017ce tak my\u015bl\u0119 bo brakuje mi obycia w temacie)","edit_count":0,"is_voted":null,"is_accepted":null,"is_subscribed":null,"user_id":110567,"deleter_name":null,"delete_reason":null,"orderingScore":0,"created_at":"2020-12-05T12:59:09+01:00","updated_at":"2020-12-05T12:59:09+01:00","deleted_at":null,"user":{"id":110567,"name":"mussel","is_online":false,"allow_sig":1,"allow_count":1,"allow_smilies":0,"posts":104,"visited_at":"2026-06-03T12:04:30.000000Z","created_at":"2020-11-30T14:25:13.000000Z","initials":"MU","is_verified":false,"is_deleted":false,"is_incognito":false,"is_blocked":false,"is_blocked_perm":false,"deleted_at":null,"photo":null},"html":"<p><a class=\"mention\" data-user-id=\"29040\" href=\"https:\/\/4programmers.net\/Profile\/29040\" rel=\"nofollow\">@somekind<\/a>:<br \/>\ndzi\u0119ki za przyk\u0142ad<\/p>\n<p>gwoli \u015bcis\u0142o\u015bci - to co doda\u0142em to nie zast\u0119puje \"starego\" API ale jest jako now\u0105 funkcjonalno\u015bci\u0105<br \/>\nMamy dane po parsowaniu XML i mo\u017cna sobie robi\u0107 taki komparator<br \/>\nnp magazyn bie\u017ce co\u015b innego pod uwage, produkcja co\u015b innego, projektanci co\u015b innego itd<\/p>\n<p>przechodz\u0105c do rzeczy to tak - na pewno nie da si\u0119 zrobi\u0107 jakie\u015b super narz\u0119dzia dla ka\u017cdego, bo jak kluczy mamy 20 to pisa\u0107 20xByKey<br \/>\nalbo jak klucze przychodz\u0105 \"z zewn\u0105trz\" itp itd<\/p>\n<p>co do samego przyk\u0142adu<br \/>\nmo\u017ce to g\u0142upie, ale chcia\u0142bym zobaczy\u0107 kod kt\u00f3ry robi takiego buildera<\/p>\n<ol>\n<li>\n<p>w cpp jest co\u015b takiego jak varadic templates, z tego co wiem c# nie ma takiej dobroci<br \/>\n<strong>.ByKey(x =&gt; x.Prop1, x =&gt; x.Prop2)<\/strong> jak takie co\u015b zbudowa\u0107 jak nie poprzez  .ByKey&lt;TProp1, TProp2&gt;(x =&gt; x.Prop1, x =&gt; x.Prop2)<br \/>\nprzy sporej kluczy to ju\u017c zaczyna si\u0119 robi\u0107 problem i zostaje tylko ByKey&lt;TProp&gt; (chyba \u017ce czego\u015b nie wiem)<\/p>\n<\/li>\n<li>\n<p>mamy taki fragment<br \/>\n<strong>beforeCollection.CompareWith(afterCollection)ByKey(x =&gt; x.Prop1, x =&gt; x.Prop2)<\/strong><br \/>\nza kolej\u0105 List&lt;T&gt;..CompareWith(List&lt;T&gt;).ByKey(T=&gt;T.Prop)<\/p>\n<\/li>\n<\/ol>\n<p>czyli przechodzimy z listy do typu listy - potem ju\u017c w kodzie aby uruchomi\u0107 t\u0105 funkcj\u0119 to trzeba sk\u0105d pobra\u0107 te propertysy<br \/>\nmamy jaki\u015b <strong>DoCompare(List&lt;T&gt; before, List&lt;T&gt; after)<\/strong> ale funkcj\u0119 by Key trzeba b\u0119dzie wywo\u0142a\u0107 ju\u017c tak<br \/>\nFunByKey(before[0])\/\/ czy tam after - jeden pies<\/p>\n<p>to jest troch\u0119 takie zaskakuj\u0105ce w kodzie - niby nic, nie takie rzeczy si\u0119 widzia\u0142o, ale jak kto\u015b to zobaczy to si\u0119 zdziwi czemu before(after) czemu [0] itd<\/p>\n<p>Konkluduj\u0105c<br \/>\nbudowa API to nie jest taka prosta sprawa, tu niby nieskoplikowany projekcik, ot taka se por\u00f3wnywarka, a jak zrobi\u0107 aby zaspokaja\u0142a potrrzeby wynikaj\u0105ce z r\u00f3\u017cnych mo\u017cliwych przypadk\u00f3w u\u017cycia to ju\u017c nie takie oczywiste (istnieje mo\u017cliwo\u015b\u0107, \u017ce tak my\u015bl\u0119 bo brakuje mi obycia w temacie)<\/p>\n","url":"http:\/\/static.175.128.202.116.clients.your-server.de\/Forum\/Oceny_i_recenzje\/346763-properties_comparator_prosba_o_kostruktywna_krytyke?p=1729619#id1729619","is_locked":false,"permissions":{"write":false,"delete":false,"update":false,"accept":false},"moderatorPermissions":{"delete":false,"update":false,"accept":false,"merge":false,"sticky":false,"admAccess":false},"comments":[],"comments_count":0,"assets":[],"metadata":"eyJpdiI6IlZDcDRaZHN4SlY0dmlOZHM2YnJPdlE9PSIsInZhbHVlIjoic3d3YnQrOUNZOWxIMXpHMGUvemZjbm1WUSszR2VuV2pjNDFxSVg4OWFXbUp3OUNUQk1zWjhnUzBJamdxdWhFS0JpKzcvb0llaEROc1RjVzlQbWJVZUVwamR3YW1tNnR0R2l5V3l4YlZ1djFQSjJ3Wk83MWk1aUVQTW5nSFIzRUQiLCJtYWMiOiJlY2U1NTJhZTFjMjI5ZjNiNjRmMjdjZjM3NDYyMzFiYzc3NDAxNWE1MzNkYWY3Zjk0NDQ0YWIxZTI5MjE3OTliIiwidGFnIjoiIn0=","has_review":false,"review_style":"info","parentPostId":null,"childrenFolded":false,"type":"regular","highlighted":false}