热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#3.0/3.5中的一些新特性

0var关键字:隐式类型的局部变量(C#编程指南)http:msdn.microsoft.comzh-cnlibrarybb384061.
0 var关键字:隐式类型的局部变量(C# 编程指南)
http://msdn.microsoft.com/zh-cn/library/bb384061.aspx
只可以赋予局部变量推断“类型”var 而不是显式类型。var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型或 .NET Framework 类库中定义的类型。有关如何使用 var 初始化数组的更多信息,请参见隐式类型的数组(C# 编程指南)。
ContractedBlock.gifExpandedBlockStart.gifCode
// i is compiled as an int
var i = 5;

// s is compiled as a string
var s = "Hello";

// a is compiled as int[]
var a = new[] { 012 };

// expr is compiled as IEnumerable
// or perhaps IQueryable
var expr =
    from c 
in customers
    
where c.City == "London"
    select c;

// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List                             
var list &#61; new List<int>();
1 自动实现的属性&#xff08;C# 编程指南&#xff09;
http://msdn.microsoft.com/zh-cn/library/bb384054.aspx

当属性访问器中不需要其他逻辑时&#xff0c;自动实现的属性可使属性声明变得更加简洁。当您如下面的示例所示声明属性时&#xff0c;编译器将创建一个私有的匿名后备字段&#xff0c;该字段只能通过属性的 getset 访问器进行访问。

 

ContractedBlock.gifExpandedBlockStart.gifCode
class LightweightCustomer
{
    
public double TotalPurchases { getset; }
    
public string Name { getprivate set; } // read-only
    public int CustomerID { getprivate set; } // read-only
}

 

2 对象和集合初始值设定项&#xff08;C# 编程指南&#xff09;
http://msdn.microsoft.com/zh-cn/library/bb384062.aspx

2.1对象初始值设定项
使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值&#xff0c;而无需显式调用构造函数。下面的示例演示如何将对象初始值设定项用于命名类型。请注意&#xff0c;在 Test 类中使用了自动实现的属性。有关更多信息&#xff0c;请参见自动实现的属性&#xff08;C# 编程指南&#xff09;。

 

ContractedBlock.gifExpandedBlockStart.gifCode
private class Cat
{
    
// Auto-implemented properties
    public int Age { getset; }
    
public string Name { getset; }
}

static void MethodA()
{
    
// Object initializer
    Cat cat &#61; new Cat { Age &#61; 10, Name &#61; "Sylvester" };
}

2.2集合初始值设定项

使用集合初始值设定项可以在初始化一个实现了 IEnumerable 的集合类时指定一个或多个元素初始值设定项。元素初始值设定项可以是简单的值&#xff0c;也可以是表达式或对象初始值设定项。通过使用集合初始值设定项&#xff0c;您将无需在源代码中指定多个对该类的 Add 方法的调用&#xff1b;编译器会添加这些调用。

下面的示例演示了两个简单的集合初始值设定项&#xff1a;

    List digits &#61; new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    List digits2 &#61; new List { 0 &#43; 1, 12 % 3, MakeInt() };
下面的集合初始值设定项使用对象初始值设定项来初始化在前面的一个示例中定义的 Cat 类的对象。

List<Cat> cats &#61; new List<Cat>
{
    
new Cat(){ Name&#61;"Sylvester", Age&#61;8 },
    
new Cat(){ Name&#61;"Whiskers", Age&#61;2},
    
new Cat() { Name&#61;"Sasha", Age&#61;14}
};

 

3匿名类型&#xff08;C# 编程指南&#xff09;

匿名类型提供了一种方便的方法&#xff0c;可用来将一组只读属性封装到单个对象中&#xff0c;而无需首先显式定义一个类型。类型名由编译器生成&#xff0c;并且不能在源代码级使用。这些属性的类型由编译器推断。匿名类型无法强制转换为除 object 以外的任何类型。 下面的示例演示一个用两个分别名为 Amount 和 Message 的属性初始化的匿名类型。

 

ContractedBlock.gifExpandedBlockStart.gifCode
        static void Main(string[] args)
        {
            var v 
&#61; new { Amount &#61; 108, Message &#61; "Hello" };
          
//  v.Amount &#61; 100;
            Console.WriteLine(v.Amount);
            Console.ReadKey();
        }

当用其他已定义类型对象的一些属性初始化匿名类型时&#xff0c;如果您没有在匿名类型中指定成员名称&#xff0c;编译器会为匿名类型成员指定与用于初始化这些成员的属性相同的名称。必须为使用表达式初始化的属性提供名称。  

 

var productQuery &#61; 
    from prod 
in products
    select 
new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine(
"Color&#61;{0}, Price&#61;{1}", v.Color, v.Price);
}

 


转:https://www.cnblogs.com/rentj1/archive/2009/06/01/1493959.html



推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
author-avatar
CCTV知府影
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有