\$\begingroup\$You use the Equals method in Main in some ifs like if (Equals(set, requiredResult)). Did you forget to post this one?\$\endgroup\$
– t3chb0tDec 19 '16 at 11:31

\$\begingroup\$No error checking in split or int.Parse. Ask for desired result first and if you don't allow negative can throw some out. If you are only going to return the first you can check against prior as it is entered. Can use HS to eliminate duplicates. Rather than add and compare. subtract once and look for specific.\$\endgroup\$
– paparazzoDec 19 '16 at 12:20

As @t3chb0t points out, you're calling Equals rather than [set object].Equals in Main. In effect you are saying this.Equals(set, requiredResult), this being the class containing Main. The object class implements Equals, and all classes inherit from object, so what you're ultimately calling is object.Equals. In other words, you've gone to the trouble of overriding Equals in your Set class but you're not using it. This will lead to unexpected results given you expect equality to be determined by the content of the properties, rather than by reference (which is what object.Equals will do for classes).

Another issue is you override Equals but don't override the equality operators. This means that set1.Equals(set2) will return a different result than set1 == set2, which is surely undesirable.

\$\begingroup\$Thank you for pointing out the fact that i didnt overload the != & == operators but since im not using them i decided they will just take more space. I picked t3chb0t's answer because using his approach not only that it shortens the code but also does all the work i might need in the future.\$\endgroup\$
– DenisDec 19 '16 at 12:37