3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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を入力すればできあがりです。
ほんのり楽になります。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?