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