title: Trying to parse a flag enum to string
body: <p>I have a class "license" which is a collection of a bunch of enum flags like this:</p>
  
  <pre><code>Public class License
  {
      UsageType Usage { get; set; }
      PlatformType Platform { get; set; }
  
      public enum UsageType { read = 1, write = 2, wipe = 4, all = 7 }
      public enum PlatformType { windows = 1, linux = 2, ios = 4, all = 7 }
  
      etc...
  }
  </code></pre>
  
  <p>The point is that the various flags of the same category can be OR'd together to form a profile of what the user can do with said license. Now I'm trying to display the values of "Usage" and "Platform" in a human-friendly way so for instance if Usage == UsageType.read | UsageType.write then it should be parsed to "read, write".</p>
  
  <p>I did this successfully with a single enum type by testing the value for each flag and appending enumitem.ToString() for each flag it has to a string. Since I have a lot of these enums and values though, I'd like to come up with a more generic approach. </p>
  
  <p>I came up with this (below) but since I'm not very familiar with template functions in c# so I don't know why this doesn't work but at least it should illustrate what i mean:</p>
  
  <pre><code>private string parseEnum&lt;T&gt;(T value)
  {
      string ret = "";
      foreach (var ei in (T[])Enum.GetValues(typeof(T)))
      {
          if (value.HasFlag(ei)) ret += ei.ToString() + ", ";
      }
      ret = ret.substring(0, ret.Length-1);
      return ret;
  }
  </code></pre>
  
  <p>It's saying that T does not contain a definition for "HasFlag" but how could it now that if it doesn't know what T is?</p>