如何在C#中使用匿名类型

匿名类型是没有名称的类型。 您可以使用匿名类型将一组只读属性封装在单个单元内-无需事先定义匿名类型。 本文讨论了什么是匿名类型,为什么它们很重要,以及我们如何在C#中使用匿名类型。

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019

[ 同样在InfoWorld上:您将犯下的6个Git错误-以及如何解决它们 ]

在Visual Studio中创建控制台应用程序项目

首先,让我们在Visual Studio中创建一个.NET Core控制台应用程序项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建新的.NET Core控制台应用程序项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。

这将在Visual Studio 2019中创建一个新的.NET Core控制台应用程序项目。我们将在本文的后续部分中使用该项目来说明如何在C#中使用匿名类型。

了解C#中的匿名类型

本质上,匿名类型是引用类型,可以使用var关键字定义。 您可以具有匿名类型的一个或多个属性,但所有属性都是只读的。 与C#类相反,匿名类型不能具有字段或方法-它只能具有属性。

您可以在已定义匿名类型的方法内访问匿名类型或其属性。 换句话说,匿名类型的可访问性仅限于已定义匿名类型的范围。

在C#中使用匿名类型

现在让我们深入研究一些代码。 考虑以下匿名类型。

var author = new
{
  FirstName = "Joydip",
  LastName = "Kanjilal",
  Address = "Hyderabad, INDIA"
};

在前面的代码片段中,author是使用new关键字创建的匿名类型的实例的名称。 (匿名类型本身的名称仅由编译器知道。)此匿名类型包含三个属性,分别是FirstName,LastName和Address。 所有这些属性都是字符串类型。 请注意,使用匿名类型时,不必在初始化属性之前指定属性的类型。

您可以使用以下代码段访问上述匿名类型的所有三个属性。

Console.WriteLine("Name: {0} {1}", author.FirstName, author.LastName);
Console.WriteLine("Address: {0}", author.Address);

在C#中使用嵌套的匿名类型

匿名类型也可以嵌套。 也就是说,您可以将匿名类型作为另一个匿名类型内部的属性。 这是一个说明这一点的例子。

var author = new
{
  FirstName = "Joydip",
  LastName = "Kanjilal",
  Address = new { City = "Hyderabad", Country = "INDIA"}
};

您可以访问此嵌套匿名类型的属性,如下面的代码片段所示。

Console.WriteLine("Name: {0} {1}", author.FirstName, author.LastName);
Console.WriteLine("Address: {0}", author.Address.City);

下面给出了完整的程序供您参考。

static void Main(string[] args)
{
  var author = new
  {
     FirstName = "Joydip",
     LastName = "Kanjilal",
     Address = new { City = "Hyderabad", Country = "INDIA"}
  };
  Console.WriteLine("Name: {0} {1}", author.FirstName, author.LastName);
  Console.WriteLine("Address: {0}", author.Address.City);
  Console.Read();
}

在LINQ中使用匿名类型

LINQ中的Select子句创建并返回一个匿名类型。 下面的代码段对此进行了说明。

考虑以下名为Author的类。

public class Author
{
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

以下代码段显示了如何创建作者列表。

IList<Author> authors =
new List<Author>()
{
  new Author() { Id = 1, FirstName = "John", LastName = "Willey"} ,
  new Author() { Id = 2, FirstName = "Steve", LastName = "Smith"} ,
  new Author() { Id = 3, FirstName = "Bill", LastName = "Ruffner"} ,
  new Author() { Id = 4, FirstName = "Joydip",  LastName = "Kanjilal" }
};

下一个代码片段显示了如何利用LINQ中的Select子句以及匿名类型来在执行查询时返回结果。

var result = from a in authors select new
{
   Id = a.Id,
   Name = a.FirstName + "\t"+ a.LastName
};

现在,您可以在控制台窗口中显示作者ID和名称,如下面的代码片段所示。

foreach (var data in result)
      Console.WriteLine(data.Name);

下面给出了完整的程序供您参考。

public class Author
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            IList<Author> authors = new List<Author>() {
                        new Author() { Id = 1, FirstName = "John",
                                      LastName = "Willey"},
                        new Author() { Id = 2, FirstName = "Steve",
                                      LastName = "Smith"},
                        new Author() { Id = 3, FirstName = "Bill",
                                      LastName = "Ruffner"},
                        new Author() { Id = 4, FirstName = "Joydip",
                                      LastName = "Kanjilal"}
                };
            var result = from a in authors
                         select new
                         {
                             Id = a.Id,
                             Name = a.FirstName + "\t" + a.LastName
                         };
            foreach (var data in result)
                Console.WriteLine(data.Name);
            Console.Read();
        }
    }

匿名类型使您可以创建类型并快速实例化它,而不必提前声明该类型。 从CLR的角度来看,匿名类型只是另一个引用类型。 编译器在幕后为每种匿名类型提供了一个名称。

匿名类型从Object类派生。 这就是为什么您只能将匿名类型强制转换为Object类型的实例的原因。 还请注意,方法,属性,事件,委托等的返回类型不能为匿名类型。

如何在C#中执行更多操作:

From: https://www.infoworld.com/article/3536470/how-to-use-anonymous-types-in-csharp.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值