28匿名タイプ


Anonymous Type


C#3.0は匿名タイプをサポートし、クラスを事前に定義せずに使用できるようにする
new {속성1=1, 속성2=2, ...}
匿名タイプは読み取り専用で、値は更新できません
C#のキーワードvarはコンパイラにタイプを推定させるために使用されますが、匿名タイプオブジェクトを変数に割り当てる場合は特別なタイプはありませんのでvarを使用します.
コンパイラは内部で匿名タイプの任意のクラスを生成し、使用します.
var t = new { Name="홍길동", Age=20 }; // var 사용
string s = t.Name;

使用


クラスを正式に定義する必要がなく、Typeを一時的に作成して使用する場合に便利です.
LINQを使うときによく使う
// LINQ의 Where() 메서드를 이용해 특정 조건의 데이터를 찾은 뒤, Select() 메서드를 사용하여 일부 컬럼들로만 구성된 새 익명 타입을 만들어 리턴
private void RunTest()
{
    var v = new[] {
        new { Name="Lee", Age=33, Phone="02-111-1111" },
        new { Name="Kim", Age=25, Phone="02-222-2222" },
        new { Name="Park", Age=37, Phone="02-333-3333" },
    };

    // LINQ Select를 이용해 Name과 Age만 갖는 새 익명타입 객체들을 리턴
    var list = v.Where(p => p.Age >= 30).Select(p => new { p.Name, p.Age });
    foreach (var a in list)
    {
        Debug.WriteLine(a.Name + a.Age);
    }
}
ソース:http://www.csharpstudy.com/