タグ付けされた質問 「generic-constraints」

21
Tを列挙型に制限するジェネリックメソッドを作成する
Enum.Parseという概念を拡張する関数を構築しています Enum値が見つからない場合にデフォルト値を解析できるようにします 大文字と小文字は区別されません だから私は以下を書きました: public static T GetEnumFromString<T>(string value, T defaultValue) where T : Enum { if (string.IsNullOrEmpty(value)) return defaultValue; foreach (T item in Enum.GetValues(typeof(T))) { if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item; } return defaultValue; } エラー制約は特別なクラスにはできませんSystem.Enum。 十分に公平ですが、Generic Enumを許可する回避策はありますか、またはParse関数を模倣して型を属性として渡す必要があります。これにより、醜いボックス化の要件がコードに強制されます。 編集以下のすべての提案は感謝されています。 解決しました(大文字と小文字を区別しないようにループを抜けました-XMLの解析時にこれを使用しています) public static class EnumUtils { public static T ParseEnum<T>(string value, T …

7
「特別クラス」とは正確には何ですか?
コンパイルするために次のようなものを得ることに失敗した後: public class Gen<T> where T : System.Array { } エラーあり 制約を特別なクラス `System.Array 'にすることはできません 「特別クラス」とは一体何なのでしょうか? System.Enum一般的な制約で指定すると、多くの場合、同じ種類のエラーが発生します。私は同じ結果を得たSystem.Object、System.Delegate、System.MulticastDelegateとSystem.ValueTypeあまりにも。 それらはもっとありますか?C#で「特殊クラス」に関する情報が見つかりません。 また、ジェネリック型の制約として使用できないほど特別なものは何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.