いくつかのフラグを含む XML があります。そのうちのいくつかは符号なし 32 ビット整数で、その他は符号なし 64 ビット整数です。それらの一部はコンマ区切りのリストで記述され、その他は 16 進形式で記述されています。
次の例を参照してください。
<Color>Blue,Red</Color>
<Color>0xC</Color>
各列挙型を解析するメソッドを書きたくないので、ジェネリック メソッドを使用することにしました。しかし、Visual Studio ではソリューションをビルドできません。これが私の方法です:
public static T ParseFlags<T>(string value) where T : struct
{
T result = (T)((object)0);
string[] array;
// Remove white spaces and delimit string if it is comma-separated
if (ParseDelimitedString(value, ',', out array))
{
for (int i = 0; i < array.Length; i++)
{
T flag = (T)((object)0);
// Check if value is member of enumeration
if (Enum.TryParse<T>(array[i], out flag))
{
result |= (T)((object)flag);
}
}
}
else
{
switch (Type.GetTypeCode(Enum.GetUnderlyingType(typeof(T))))
{
// Remove hex characters and parse node's inner text
case TypeCode.UInt32:
result = (T)((object)ParseUint(value));
break;
case TypeCode.UInt64:
result = (T)((object)ParseUlong(value));
break;
}
}
return result;
}
私が得るエラーメッセージは次のとおりです。
エラー 1 演算子 '|=' は型 'T' および 'T' のオペランドには適用できません
これを行う方法はありますか?