12

私はC#で匿名型を学んでおり、それらがどのように定義され使用されているかを理解しています。以下は、匿名型で試したサンプルコードです。

var myType = new {
Name = "Yasser",
City = "Mumbai"
};
Console.WriteLine("Name: {0}, Type: {1}", myType.Name, myType.City);

私の質問

実際のシナリオでは、これらはどこで使用されますか? これらの匿名型を使用できる例またはシナリオを教えてください。

4

6 に答える 6

17

LINQ クエリはそれらを頻繁に使用します。

var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

は、読み取り専用のandプロパティ{ prod.Color, prod.Price }を持つ匿名型です。そのクエリの結果を反復処理する場合は、その型を他のクラスとして使用できます。ColorPrice

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

つまり、次のような新しいクラスを定義する必要はありません。

public class ColoredPricedItem
{
    public Color {get;}
    public Price {get;}
}

さらに、ColorタイプPriceはクエリから正しく推測されます。

于 2012-08-03T11:44:33.257 に答える
5

この種のクラスがあるとしましょう:

class User
{
    public int ID;
    public string FirstName;
    public string LastName;
    public int Age;
    public string City;
    public string Country;
}

Tがユーザークラスである一般的なリストを作成します。n 人のユーザーを作成します。ポイントは、一部のクエリですべてのフィールド (またはプロパティ) を表示するのではなく、人物の名と姓 (1 つとして) とその人物が住んでいる都市のみを表示することです。したがって、Linq で新しいキーワードを使用します (Linq のドン表記の使用方法を示します)。

        List<User> users = new List<User>();
        users.Add(new User { ID = 1, FirstName = "first 1", LastName = "last 1", Age = 32, City = "City 1", Country = "Country 1" });
        users.Add(new User { ID = 2, FirstName = "first 2", LastName = "last 2", Age = 33, City = "City 2", Country = "Country 2" });
        users.Add(new User { ID = 3, FirstName = "first 3", LastName = "last 3", Age = 34, City = "City 3", Country = "Country 3" });

        var query = users.Select(s => new
            {
                FIRST_LAST = string.Format("{0} {1}", s.FirstName, s.LastName),
                LIVING_IN = s.City
            }).ToList();
        foreach (var person in query)
        {
            string name = person.FIRST_LAST;
            string city = person.LIVING_IN;
        }

それが役に立てば幸いです、さようなら

于 2012-08-03T11:57:51.633 に答える
3

Linqで使用されているだけでなく、Global.asax.csのasp.netMVCアプリケーションでルートのマッピングに使用されています

  routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  );
于 2012-08-03T11:48:04.870 に答える
3

一部のWebフレームワークは、HTMLタグ属性を表すためにそれらを使用します。

var t = new Table(new { align="left", bgcolor="red", cellpadding="2" });
于 2012-08-03T11:48:17.373 に答える
1

匿名型は、C# 3 で LINQ 用に追加されました。http://msdn.microsoft.com/en-us/library/bb397696.aspxなど、データベースからいくつかのプロパティのみが必要な場合に最適です。


var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}


これは、データベースから列 Color と Price のみをフェッチします:)

于 2012-08-03T11:45:59.400 に答える
0

これを使用して、html 要素を生成できます。

以下の例では、"el" メソッドを使用して、指定された属性と innerHTML を持つ html 要素を生成します。パラメータ「params object[] objects」を使用すると、任意の数の匿名オブジェクトを指定して、目的の html 属性を定義できます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace anonymousTypes
{
    class Program
    {
        static void Main(string[] args)
        {

            el("td", null, new { colspan = 36 }, new { style = "text-align: center;" });
            Console.Read();
        }

        static string el(string tagName, string innerHTML, params object[] objects)
        {
            StringBuilder b = new StringBuilder();
            b.Append("<").Append(tagName);
            foreach (object obj in objects)
            {
                foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
                {
                    Console.Write(propertyInfo.Name + " | " + propertyInfo.GetValue(obj, null) + "\n");
                }
            }
            b.Append(">");
            if (innerHTML != null)
                b.Append(innerHTML);
            b.Append("</").Append(tagName).Append(">");
            return b.ToString();
        }
    }
}
于 2012-08-03T12:03:26.417 に答える