I have a class "license" which is a collection of a bunch of enum flags like this:
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...
}
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".
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.
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:
private string parseEnum<T>(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;
}
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?
 
     
     
    