English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C# 面向オブジェクト(OOP)
C#では、匿名型は名前を持たない型(クラス)であり、名前は公共の読み取り専用属性のみを含むことができます。フィールド、メソッド、イベントなどの他のメンバーを含むことはできません。
匿名型は、名前を持たない型(クラス)であり、名前は公共の読み取り専用属性のみを含むことができます。フィールド、メソッド、イベントなどの他のメンバーを含むことはできません。
var student = new { Id = 1, FirstName = "James", LastName = "Bond" };
匿名型の例
var student = new { Id = 1, FirstName = "James", LastName = "Bond" }; 匿名型のアクセスの例 //Console.WriteLine(student.Id);1 出力 //Console.WriteLine(student.FirstName); 出力:James //Console.WriteLine(student.LastName); 出力:Bond 2student.Id =//student.FirstName = "Steve"; ;//student.FirstName = "Steve";
エラー:値を変更できません
var student = new { Id = 1, FirstName = "James", LastName = "Bond", Address = new { Id = 1, City = "London", Country = "UK" };
匿名型配列を作成することもできます。
var students = new[] { new { Id = 1, FirstName = "James", LastName = "Bond" new { Id = 2, FirstName = "Steve", LastName = "Jobs" new { Id = 3FirstName = "Bill", LastName = "Gates" };
匿名型は定義するメソッドに対して常にローカルです。メソッドから返すことはできません。ただし、匿名型はメソッドにオブジェクト型パラメータとして渡すことができますが、これを推奨しません。別のメソッドに渡す必要がある場合は、匿名型ではなく struct や class を使用してください。
通常、LINQクエリのSelect子句を使用して匿名型を作成し、コレクションの各オブジェクトから属性のサブセットを返します。
class Program { static void Main(string[] args) { IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "ジョン", age = 18 }, new Student() { StudentID = 2, StudentName = "スティーブ", age = 21 }, new Student() { StudentID = 3, StudentName = "ビル", age = 18 }, new Student() { StudentID = 4, StudentName = "ラム" , age = 20 }, new Student() { StudentID = 5, StudentName = "ロン" , age = 21 } }; var students = from s in studentList select new { Id = s.StudentID, Name = s.StudentName }; foreach(var stud in students) Console.WriteLine(stud.Id + "-" + stud.Name); } } public class Student { public int StudentID { get; set; } public string StudentName { get; set; } public int age { get; set; } }
1-ジョン 2-スティーブ 3-ビル 4-ラム 5-ロン
上記の例では、LINQクエリのselect子句はStudentIDとStudentName属性を選択し、それぞれをIdとNameにリネームします。そのため、メモリの節約や不必要なコードの削減に非常に役立ちます。クエリ結果の集合には、以下のデバッグビューのようにStudentIDとStudentName属性のみが含まれています。
Visual Studioは匿名型に対してIntelliSenseをサポートしています。
内部では、すべての匿名型は直接System.Objectクラスから派生しています。コンパイラは自動的に生成された名前を持つクラスを生成し、各属性に適切な型を適用します。それでも、あなたのコードではアクセスできないものですが、GetType()メソッドを使用して名前を確認できます。
static void Main(string[] args) { var student = new { Id = 1, FirstName = "James", LastName = "Bond" }; Console.WriteLine(student.GetType().ToString()); }