# Refactor C# OR statement using Linq

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?

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