Help us understand the problem. What is going on with this article?

Lazy<T>なプロパティのスニペット

More than 5 years have passed since last update.

Lazy<T>クラス

https://msdn.microsoft.com/ja-jp/library/dd642331%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
にあるように変数の遅延初期化を行えます。
正直Lazy<T>を使わなくても書き方はいろいろありますが、

  • コンストラクタの引数つかって初期化処理するけどその引数をわざわざフィールドなりで持つまでもない
  • Parallel or Task 越しに触れるようにしておかなければいけない

場合はLazy<T>推奨なわけです。

よくある使い方

        private Lazy<HogeClass> _hoge;
        public HogeClass Hoge { get { return _hoge.Value; } }

遅延初期化したいプロパティなどで上のような書き方をすることがよくある(毎回 .Value を書きたくない)と思いますが。。。正直めんどくさい。
のでスニペット作りました。

Lazy<T>なフィールド、プロパティでゲット

lazy.snippet
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>LazyProperty</Title>
            <Shortcut>lz</Shortcut>
            <Description>Lazy Property</Description>
            <Author>Taro Furuya</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>typename</ID> 
                    <ToolTip>TypeName</ToolTip>
                    <Default>TypeName</Default>
                </Literal>
                <Literal>
                    <ID>fieldname</ID>
                    <ToolTip>FieldName</ToolTip>
                    <Default>_fieldName</Default>
                </Literal>
                <Literal>
                    <ID>propertyname</ID>
                    <ToolTip>PropertyName</ToolTip>
                    <Default>PropName</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                private Lazy<$typename$> $fieldname$;
                public $typename$ $propertyname$ { get { return $fieldname$.Value; } }
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Lazyのフィールドがreadonlyバージョン

readonlylazy.snippet
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>ReadonlyLazyProperty</Title>
            <Shortcut>lzr</Shortcut>
            <Description>Readonly Lazy Property</Description>
            <Author>Taro Furuya</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>typename</ID> 
                    <ToolTip>TypeName</ToolTip>
                    <Default>TypeName</Default>
                </Literal>
                <Literal>
                    <ID>fieldname</ID>
                    <ToolTip>FieldName</ToolTip>
                    <Default>_fieldName</Default>
                </Literal>
                <Literal>
                    <ID>propertyname</ID>
                    <ToolTip>PropertyName</ToolTip>
                    <Default>PropName</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                private readonly Lazy<$typename$> $fieldname$;
                public $typename$ $propertyname$ { get { return $fieldname$.Value; } }
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

使い方

これらをファイルに保存してからVSのツール>スニペットマネージャから追加してください。
任意のクラスの直下でlz->tab or lzr->tab で

ex.cs
        private Lazy<TypeName> _fieldName;
        public TypeName PropName { get { return _fieldName.Value; } }

こんな感じのできるのでTabで移動しながらTypeName,_fieldName,PropNameを入力すればできあがりです。
ほんのり楽になります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away