<?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>