详解C#中使用对象或集合的初始值设定项初始化的操作

作者:goldensun 时间:2021-12-25 20:04:52 

使用对象初始值设定项初始化对象

可以使用对象初始值设定项以声明方式初始化类型对象,而无需显式调用类型的构造函数。
下面的示例演示如何将对象初始值设定项用于命名对象。编译器通过先访问默认实例构造函数然后处理成员初始化处理对象初始值设定项。因此,如果默认构造函数在类中声明为 private,那么需要公共访问权的对象初始值设定项将失败。

下面的示例演示如何使用对象初始值设定项初始化新的 StudentName 类型。


public class Program
{
 public static void Main()
 {

// Declare a StudentName by using the constructor that has two parameters.
   StudentName student1 = new StudentName("Craig", "Playstead");

// Make the same declaration by using an object initializer and sending
   // arguments for the first and last names. The default constructor is
   // invoked in processing this declaration, not the constructor that has
   // two parameters.
   StudentName student2 = new StudentName
   {
     FirstName = "Craig",
     LastName = "Playstead",
   };

// Declare a StudentName by using an object initializer and sending
   // an argument for only the ID property. No corresponding constructor is
   // necessary. Only the default constructor is used to process object
   // initializers.
   StudentName student3 = new StudentName
   {
     ID = 183
   };

// Declare a StudentName by using an object initializer and sending
   // arguments for all three properties. No corresponding constructor is
   // defined in the class.
   StudentName student4 = new StudentName
   {
     FirstName = "Craig",
     LastName = "Playstead",
     ID = 116
   };

System.Console.WriteLine(student1.ToString());
   System.Console.WriteLine(student2.ToString());
   System.Console.WriteLine(student3.ToString());
   System.Console.WriteLine(student4.ToString());
 }
}

这段的输出是:


Craig 0
Craig 0
183
Craig 116

public class StudentName
{
 // The default constructor has no parameters. The default constructor
 // is invoked in the processing of object initializers.
 // You can test this by changing the access modifier from public to
 // private. The declarations in Main that use object initializers will
 // fail.
 public StudentName() { }

// The following constructor has parameters for two of the three
 // properties.
 public StudentName(string first, string last)
 {
   FirstName = first;
   LastName = last;
 }

// Properties.
 public string FirstName { get; set; }
 public string LastName { get; set; }
 public int ID { get; set; }

public override string ToString()
 {
   return FirstName + " " + ID;
 }
}

下面的示例演示如何使用集合初始值设定项初始化一个 StudentName 类型集合。请注意,集合初始值设定项是一系列由逗号分隔的对象初始值设定项。


List<StudentName> students = new List<StudentName>()
{
new StudentName {FirstName="Craig", LastName="Playstead", ID=116},
new StudentName {FirstName="Shu", LastName="Ito", ID=112},
new StudentName {FirstName="Gretchen", LastName="Rivas", ID=113},
new StudentName {FirstName="Rajesh", LastName="Rotti", ID=114}
};


使用集合初始值设定项初始化字典

Dictionary<TKey, TValue> 包含键/值对集合。 它的 Add 方法采用两个参数,一个用于键,另一个用于值。 若要初始化 Dictionary<TKey, TValue> 或其 Add 方法采用多个参数的任何集合,请将每组参数括在大括号中,如下面的示例所示。
示例
在下面的代码示例中,使用 StudentName 类型的实例初始化一个 Dictionary<TKey, TValue>。


class StudentName
{
 public string FirstName { get; set; }
 public string LastName { get; set; }
 public int ID { get; set; }
}

class CollInit
{
 Dictionary<int, StudentName> students = new Dictionary<int, StudentName>()
 {
   { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}},
   { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}},
   { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}
 };
}

请注意集合的每个元素中的两对大括号。 最内层的大括号括起了 StudentName 的对象初始值,而最外层的大括号括起了将要添加到 studentsDictionary<TKey, TValue> 中的键/值对的初始值。 最后,字典的整个集合初始值括在一对大括号内。

标签:C#,初始化
0
投稿

猜你喜欢

  • Spring Boot Redis 集成配置详解

    2022-12-05 20:57:59
  • Java毕业设计实战之生活旅行分享平台的实现

    2022-02-01 02:42:18
  • Java使用ArrayList实现扑克牌的示例代码

    2021-10-29 15:17:17
  • Maven如何修改打包文件名称

    2022-09-02 21:29:52
  • Android中RecyclerView上拉下拉,分割线,多条目的实例代码

    2022-10-14 06:05:07
  • 解决android studio卡顿,提升studio运行速度的方法

    2021-11-19 01:25:05
  • Java创建线程的两种方式

    2023-09-12 05:20:55
  • Android Bitmap和Drawable的对比

    2021-11-16 06:03:41
  • Unity3D实现甜品消消乐游戏

    2022-11-06 16:26:24
  • 使用SpringBoot整合ssm项目的实例详解

    2023-09-29 16:34:43
  • c# winform时钟的实现代码

    2023-04-05 07:40:53
  • Java接口返回省市区树形结构的实现

    2021-10-16 05:07:05
  • C# 利用PdfSharp生成Pdf文件的示例

    2022-01-18 17:31:30
  • C#控制台实现飞行棋小游戏

    2023-04-27 05:13:43
  • Android评分控件RatingBar使用实例解析

    2022-02-07 14:17:03
  • c# DataDirectory的用法

    2021-07-30 14:36:22
  • Unity实现游戏伤害数字显示HUD的方法

    2023-05-18 06:47:01
  • Android详解之NoHttp最基本使用(无封装)

    2022-09-28 17:11:51
  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    2023-12-06 07:34:14
  • Android判断某个权限是否开启的方法

    2021-06-28 07:42:15
  • asp之家 软件编程 m.aspxhome.com