《CLR Via C# 第3版》笔记之(十一) - 匿名类型和元组

简介:

匿名类型使得C#更具动态性。而元组则是以前看python时就了解的一个类型,与List类型类似,只是它里面的元素是不可变的。

主要内容:

  • 匿名类型介绍
  • 元组的介绍

1. 匿名类型介绍

匿名类型其实也像元组一样,定义了以后就不能更改里面元素的名称和个数。

使用匿名类型的代码非常简单:

using System;

namespace cnblog_bowen
{
    public sealed class CLRviaCSharp_11
    {
        static void Main(string[] args)
        {
            var v = new { Name="my name", Age=100 };

            Console.WriteLine("Name={0}, Age={1}", v.Name, v.Age);
            Console.ReadKey(true);
        }
    }
}

在第一次定义的时候指定元素的名称,元素的类型是由系统自动推断的。定义完后就可以可以当成一个实例来使用了。

现在visual studio也可以“智能感知”匿名类型的属性名了。

匿名类型的一些规则:

1)如果两个匿名类型的结构完全一样,那么它们之间可以进行赋值操作

2)匿名类型是引用类型,编译器会生成相应的class,而不是struct

3)匿名类型也是Object类派生的,但是无法将Object类型转型回匿名类型。

4)匿名类型不能作为一个方法的参数和返回值。

上述3)4)的原因在于,匿名类型的名称是有编译器按一定规则生成的,在写代码的时候并不知道我们定义的匿名类型的具体名称。

因此,无法从Object转型回匿名类型,也不能指定方法的参数类型和返回值类型。

2. 元组的介绍

C#中的泛型元组类型重载了多个版本,用于创建各种参数类型和个数的元组。

创建元组的方法如下所示:

namespace System
{
    // Summary:
    //     Provides static methods for creating tuple objects.
    public static class Tuple
    {
        public static Tuple<T1> Create<T1>(T1 item1);
        public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2);
        public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3);
        public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4);
        public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5);
        public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6);
        public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7);
        public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8);
    }

元组创建后就是只读的了,不能在对其中的元素进行修改。

元组的一些规则:

1)元组中的字段都是以Item#的方式命名的(即Item1,Item2……)

2)写Tuple和用Tuple的人必须对Item#属性放回的内容有个清楚的了解

3)Tuple类型可以作为方法的参数和返回值



本文转自wang_yb博客园博客,原文链接:http://www.cnblogs.com/wang_yb/archive/2011/07/08/2100788.html,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
C# 开发者
C# 7.0 中的元组:多值返回与结构化数据的便捷之道
【1月更文挑战第7天】C# 7.0 引入了元组作为一等公民,为开发者提供了一种方便的方式来返回多个值和处理结构化数据。元组不仅使方法能够返回多个不同类型的值,还通过语义化的命名提高了代码的可读性和可维护性。本文将探讨C# 7.0中元组的概念、特性、用法以及它们如何提升编程效率和代码质量。
|
6月前
|
C# Python
C# 笔记1 - 操作目录
C# 笔记1 - 操作目录
55 0
|
1月前
|
算法 安全 测试技术
C#——刘铁猛笔记
C#——刘铁猛笔记
48 0
|
3月前
|
存储 C#
C#语言进阶(三) 元组
C#语言进阶(三) 元组
34 0
|
5月前
|
关系型数据库 C# 数据库
技术笔记:MSCL超级工具类(C#),开发人员必备,开发利器
技术笔记:MSCL超级工具类(C#),开发人员必备,开发利器
54 3
|
5月前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
88 0
|
6月前
|
C# Python
C# 笔记3 - 重载一系列像python那样的print()方法
C# 笔记3 - 重载一系列像python那样的print()方法
50 1
|
6月前
|
存储 C# C++
C# 笔记2 - 数组、集合与与文本文件处理
C# 笔记2 - 数组、集合与与文本文件处理
80 0
|
存储 网络协议 Java
C# 快速入门笔记
C# 快速入门笔记
C# 快速入门笔记
|
SQL 开发框架 算法
【读书笔记】《Effective C#》50条建议笔记整理
对《Effective C#:改善C#代码的50个有效方法》一书整理的读书笔记。
28216 5
【读书笔记】《Effective C#》50条建议笔记整理