LINQクエリ以外では、C#で匿名型をどのように使用しますか?
-
03-07-2019 - |
質問
C#のいくつかの新しい機能について理解しようとしていますが、使用したことがない機能の1つに匿名型があります。
LINQクエリに関係する使用法を理解し、同様の質問をしたこのSO投稿。私がネット上で見た例のほとんどは、LINQクエリに関連しています。多少不自然な例もいくつか見ましたが、多くの価値があるとは思えませんでした。
実際に何らかの有用性を提供すると思われる匿名型の新しい用途はありますか?
解決
少し反省して、匿名型を辞書に変換できます<!> lt; string、object <!> gt ;; Roy Osheroveは、このための彼のテクニックをブログに書いています: http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx
Jacob Carpenterは、オブジェクトの初期化に似た構文で不変オブジェクトを初期化する方法として匿名型を使用します。 http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/
匿名型は、foreach
ステートメントで反復処理されるコレクション内のオブジェクトのプロパティに読みやすいエイリアスを与える方法として使用できます。 (正直なところ、これは LINQ to Objects )。例:
Dictionary<int, string> employees = new Dictionary<int, string>
{
{ 1, "Bob" },
{ 2, "Alice" },
{ 3, "Fred" },
};
// standard iteration
foreach (var pair in employees)
Console.WriteLine("ID: {0}, Name: {1}", pair.Key, pair.Value);
// alias Key/Value as ID/Name
foreach (var emp in employees.Select(p => new { ID = p.Key, Name = p.Value }))
Console.WriteLine("ID: {0}, Name: {1}", emp.ID, emp.Name);
この短いサンプルではあまり改善はありませんが、ID
ループが長くなると、Name
および<=>を参照すると読みやすくなります。
他のヒント
ASP.NET MVCルーティングは、これらのオブジェクトをあらゆる場所で使用します。
ときどき、LINQクエリのような 何かを実行するのが便利かもしれませんが、たまたまLINQを使用しませんが、何らかの投影が必要です。 LINQプロジェクションと根本的に異なるものに、現在の形式で匿名型を使用するとは思わない。
私が見たいことの1つは、<!> quot; named <!> quot;を作成する機能です。匿名の型と同じ方法でプロパティとコンストラクターを生成し、同じ(便利な)方法でEquals / GetHashCode / ToStringをオーバーライドする単純な宣言を持つ型。これらのタイプは<!> quot; normal <!> quot;に変換できます。さらに行動を追加する必要が生じたときに入力します。
繰り返しますが、あまり頻繁に使用することはないと思いますが、特にクラスのいくつかのメソッド内では、その機能が便利になることがよくあります。これはおそらく、C#5で不変型をより多くサポートするためのより大きな努力の一部かもしれません。
Justiceが言ったことに付け加えると、ASP.Net MVCは、これらが興味深く有用な方法で使用されているのを見た最初の場所です。次に例を示します。
Html.ActionLink("A Link", "Resolve", new { onclick = "someJavascriptFn();" })
ASP.Net MVCは、このような匿名型を使用して、HTML要素に任意の属性を追加します。同じことを達成できる方法はいくつかあると思いますが、匿名型の簡潔なスタイルが好きです。これにより、より動的な言語の感覚が得られます。
匿名型の最大の用途はLINQです。実際、これが作成された理由です。
linqの外部にある匿名型の理由の1つは、一時的な構造体のようなオブジェクトを作成することだと思います。例:
var x = new { a = 1, b = 2 };
これは、状況によってはあなたの人生を少し楽にするかもしれません。
リフレクションとジェネリックを使用している場合は素晴らしいので、テンプレート化されたメールを行うためにそれらを使用しました。
いくつかの情報はここにあります: http://www.aaron- powell.com/blog.aspx?id=1247