VS2015用のコードスニペット。 soi 氏のコードを.NET4.6.2以降に対応するよう修正したもの。
- <?xml version="1.0" encoding="utf-8"?>
- <CodeSnippets
- xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <Title>Attribute and Getter</Title>
- <Author>soi, くまかみ工房</Author>
- <Shortcut>attrg</Shortcut>
- </Header>
- <Snippet>
- <Declarations>
- <Literal>
- <ID>name</ID>
- <ToolTip>属性の名前</ToolTip>
- <Default>属性名</Default>
- </Literal>
- <Literal>
- <ID>type</ID>
- <ToolTip>属性の型</ToolTip>
- <Default>string</Default>
- </Literal>
- <Literal>
- <ID>enumType</ID>
- <ToolTip>属性を付与するenumの型</ToolTip>
- <Default>Enum</Default>
- </Literal>
- <Literal>
- <ID>defaultValue</ID>
- <ToolTip>属性が定義されていなかった場合の値</ToolTip>
- <Default>value.ToString()</Default>
- </Literal>
- </Declarations>
- <Code Language="csharp">
- <![CDATA[[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
- public sealed class $name$Attribute : Attribute
- {
- public $type$ $name$ { get; private set; }
- public $name$Attribute($type$ $name$)
- {
- this.$name$ = $name$;
- }
- }
- public static $type$ Get$name$(this $enumType$ value)
- {
- bool 既定値 = $defaultValue$;
- var valueType = value.GetType();
- var member = valueType.GetMember( Enum.GetName( valueType, value ) )[ 0 ]; // 必ずある;なければ例外
- var attribute = Attribute.GetCustomAttribute( member, typeof( $name$Attribute ) ) as $name$Attribute;
- return attribute?.$name$ ?? 既定値;
- }]]>
- </Code>
- </Snippet>
- </CodeSnippet>
- </CodeSnippets>