как пройти через все значения перечисления в c #?

<blockquote> <p><strong> на этот вопрос уже есть ответ здесь: </strong><br> <a href="https://stackoverflow.com/questions/105372/how-to-enumerate-an-enum">как мне перечислить перечисление в c #?</a> <em> 26 ответов </em></p> </blockquote><pre><code>public enum foos { a, b, c } </code></pre><p>есть ли способ перебрать возможные значения <code>foos</code>?</p><p>в принципе?</p><pre><code>foreach(foo in foos) </code></pre>

<p>да, вы можете использовать метод  <a href="https://docs.microsoft.com/en-us/dotnet/api/system.enum.getvalues"><code>getvalues</code></a> :</p><pre><code>var values = enum.getvalues(typeof(foos)); </code></pre><p>или печатная версия:</p><pre><code>var values = enum.getvalues(typeof(foos)).cast<foos>(); </code></pre><p>я давно добавил вспомогательную функцию в свою личную библиотеку именно для такого случая:</p><pre><code>public static class enumutil { public static ienumerable<t> getvalues<t>() { return enum.getvalues(typeof(t)).cast<t>(); } } </code></pre><p>использование:</p><pre><code>var values = enumutil.getvalues<foos>(); </code></pre>

<pre><code>foreach(foos foo in enum.getvalues(typeof(foos))) </code></pre>

<pre><code>foreach (emyenum val in enum.getvalues(typeof(emyenum))) { console.writeline(val); } </code></pre><p>благодарим джона скита здесь: <a href="http://bytes.com/groups/net-c/266447-how-loop-each-items-enum">http://bytes.com/groups/net-c/266447-how-loop-each-items-enum</a> </p>

<pre><code>foreach (foos foo in enum.getvalues(typeof(foos))) { ... } </code></pre>

<p><strong>обновлено</strong><br> некоторое время спустя, я вижу комментарий, который возвращает меня к моему старому ответу, и я думаю, что теперь я сделал бы это по-другому. в эти дни я бы написал:</p><pre><code>private static ienumerable<t> getenumvalues<t>() { // can't use type constraints on value types, so have to do check like this if (typeof(t).basetype != typeof(enum)) { throw new argumentexception("t must be of type system.enum"); } return enum.getvalues(typeof(t)).cast<t>(); } </code></pre>

<pre><code>static void main(string[] args) { foreach (int value in enum.getvalues(typeof(daysofweek))) { console.writeline(((daysofweek)value).tostring()); } foreach (string value in enum.getnames(typeof(daysofweek))) { console.writeline(value); } console.readline(); } public enum daysofweek { monday, tuesday, wednesday } </code></pre>

<pre><code> enum.getvalues(typeof(foos)) </code></pre>

<p>да. используйте <a href="https://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx"><code>getvalues()</code></a> метод в <a href="http://msdn.microsoft.com/en-us/library/system.enum.aspx"><code>system.enum</code></a> класс.</p>