VS2017RCのC#7で遊んでみた(ついでにValueTupleでハマったのでメモ)

VisualStudio2017RCが出たのでC#7でちょっと遊んでみました。

Visual Studio 2017 リリース ノート

 

ch9の↓の動画でも今回のRCで何の機能が入っているか解りますね。

Connect(); // 2016

 

そのほかC#7の新機能については安定のufcppさんのページで。

C# 7 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

値タプル(ValueTuple)使うときにハマった

で、早速値タプル使おうと思ったんですが、なぜかビルドエラーになる。

__DEMO__とかもう要らないよな~とか思いつつ足してみるもエラー。

なんでだ~と思っていたら、System.ValueTupleの参照が必要なんですね。

知らなかった・・・。ビルドエラーちゃんと読めば書いてあったんですが、

その時は使えないのかと思ってしまいました。

タプル構文 - 多値戻り値のサポート - xin9le.net

こちらにも書いてありますね・・・。

  • ローカル関数
  • outのインライン宣言
  • 型switch

などは普通に使えてこちらもとても便利便利。

インテリセンスで変数、関数などでフィルターがかけられるようになったのも

地味に便利です。

VS2017RC素晴らしいです。

 

C#ではないですが、C++ではビルド高速化、リンク時間30%削減と

こちらは仕事で試してみたい案件。

Visual Studio “15” で C++ ソリューションの読み込みとビルドを高速化 – Visual Studio 日本チーム Blog

 

T4メモ

T4テンプレートについて軽く調査したのでメモ

Visual Studio搭載のT4テンプレートエンジンの3通りの活用方法 - seraphyの日記

Visual Studio × T4 × 属性で Entity コード大量生成 - Qiita

基本は上つ2つのページに全て書いてある。

あとメタプログラミング.NET本。

(ランタイムテンプレートのサンプルがほぼないのが残念)

 

テンプレートの種類

テンプレートの種類は2種類

  1. テキストテンプレート(設計時テキストテンプレート)
  2. ランタイムテンプレート(実行時テンプレート)

テキストテンプレート(設計時テキストテンプレート)

ソリューションのビルドプロセスの過程でコンパイル、変換される。

.cs以外にも.txtや.cpp等々を生成可能。

コマンドやデータの追加に不随する処理の追加等を自動生成することに使用できそう。

後は、C#で書いたModel(データ)の定義からC++等の別の言語の定義や処理の自動生成とか。

ランタイムテンプレート(実行時テンプレート)

実行時にテンプレートに記述されている変数等を評価して文字列(String)を生成する。

データのフォーマット変換とかに使える感じかなと。

データの変換部分をテンプレート化しておいて、任意のデータ読み込んで、

テンプレートで自動生成されたpartialクラスに読み込んだデータ突っ込んで、

TransformTextするといったような感じでしょうか。

あとはRazorでやっているようなこととかをこっちに置き換えると、

間違った記述をしたときにコンパイルエラーにしてくれるので便利。

その他

csproj.user を作るための T4 テンプレート | kazuk は null に触れてしまった

こちらにもおもしろいT4の書き方が載っていたのでめも

よく訓練されたT4使いは 「何を元に作るか」 「何を作るか」 だけを考える。

<# Generate( (何を元に作るか), (o)=>{#> 何を作るか <#} ); #> と書く。

 

メタプログラミング.NET

メタプログラミング.NET