How can I write this OR statement better, allowing for growth in number of values?

var isNewFile = (progressID == 10 || progressID == 20 || progressID == 21);

I was thinking of this:

var isNewFile = progressID.Contains (10,20,21)

OR using Linq:

.Select or .Contains

Any thoughts?

  • 2
    \$\begingroup\$ What's wrong with that? Do you need a dynamic list of possible IDs? \$\endgroup\$ – musefan Feb 20 '14 at 16:56
  • \$\begingroup\$ No, just wanted to keep it cleaner (looking) .. \$\endgroup\$ – Ravi Ram Feb 20 '14 at 16:59
  • 1
    \$\begingroup\$ To make it cleaner, I would use an enum or constants instead of the "magic numbers" .. and likely leave the ||s alone for now. \$\endgroup\$ – user2864740 Feb 20 '14 at 17:00

For something this simple, I think using the || is fine, however, if you need to use the list of acceptable integers more generally or avoid hard-coding the set in a single expression1, you can use something like this:

var newFileProgressIds = new[] { 10, 20, 21 };

var isNewFile = newFileProgressIds.Contains(progressID);

Or possibly use a HashSet<T>:

var newFileProgressIds = new HashSet<int> { 10, 20, 21 };

var isNewFile = newFileProgressIds.Contains(progressID);

1: Of course, in these examples, the values are still hard coded in one place, but precisely how you generate the list is unimportant.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.