首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解析“60k”大佬19道C#面试题(下)

先略看题目: 简述 LINQ lazy computation 机制 利用 SelectMany 实现两个数组中元素做笛卡尔集,然后一一相加 请为三元函数实现柯里化 请简述 refstruct 作用...请简述 refstruct 作用 refstruct C# 7.2 发布新功能,主要是为了配合 Span ,防止 Span 被误用。 为什么会被误用呢?...基于不被托管堆管理这一点,我们可以总结出以下结论: 不能对 refstruct 装箱(因为装箱就变成引用类型了)——包括不能转换为 object 、 dynamic 禁止实现任何接口(因为接口引用类型...而引用类型、 struct 成员和自动属性都可能在托管内存中) 禁止在迭代器( yield )中使用 refstruct (因为迭代器本质状态机,状态机一个引用类型) 在 Lambda 或 本地函数...中使用(因为 Lambda / 本地函数 都是闭包,而闭包会生成一个引用类型类) 以前常有一个疑问,我们常常说值类型在栈中,引用类型在堆中,那放在引用类型类型成员,内存在哪?

1.5K10

JavaScript中,var、let和const使用

var:遗留关键字历史上看,varJavaScript中声明变量唯一方式。它具有函数作用,这意味着用var声明变量被限定在声明它们函数内,而不是它们被定义块内。...这创建了一个暂时性死区(TDZ),在这个区域中变量不可访问。let:现代开发块级作用let在2015年6月ECMAScript 6(ES6)中引入。...这意味着用let声明变量只有在它们定义块内(通常用大括号{}包围)才可访问。这提供了一种清晰和可预测方式来管理变量作用,防止意外作用,使你代码更易于维护。当使用循环时,let首选。...(假设age >= 18)虽然let主要关注块级作用但它还在函数内部引入了比旧var关键字更可预测行为。在函数内部用let声明变量在该函数外部不可访问,促进了更好组织并防止了意外修改。...,但它并不保证像对象和数组这样复杂数据类型不变性。

2700
您找到你想要的搜索结果了吗?
是的
没有找到

C#匿名类型、var、dynamic进化史

随着C#发展,该语言内容不断丰富,开发变得更加方便快捷,C# 锋利尽显无疑。C# 语言诞生起就是强类型语言,这一性质到今天不曾改变,我想以后也不会变。...匿名对象(匿名类型) 因此C#在3.0版本中吸收了JavaScript脚本语言这种语法优点,对C#做了相应升级使其也支持这种语法形式(C#依然类型语言)。...Var登场 现在要使用匿名对象,则需要使用变量引用它。虽然我们在创建时没有指定对象类型,但编译器会在编译过程中帮我们创建一个具有相关属性和方法类型。...示例如下: static void Main(string[] args) { //XXX为类型声明 //x引用变量 XXX x = new {Name="张三",Age=...说明: var 和 dynamic 看似功能类似,但它不同: var dynamic 声明字段 × √ 局部变量 √ √ 方法参数类型 × √ 方法返回值类型 × √

8710

C#2.0增功能04 可以为 null 类型

基础类型 T 可以是任何不可为 null 类型。 T 不能引用类型。...需要表示基础类型未定义值时,请使用可以为 null 类型。 布尔变量只能有两个值:true 和 false。 没有“未定义值。...在许多编程应用程序中,尤其数据库交互中,变量值可能未定义或缺失。 例如,数据库中字段可能包含值 true 或 false,但它也可能根本不包含任何值。...不能根据引用类型创建可以为 null 类型引用类型已支持 null 值)。 语法 T? Nullable 简写。 这两种形式可互换。... C# 7.0 开始,可以使用模式匹配来检查和获取可以为 null 类型值:if (x is int valueOfX) y = valueOfX;。 T?

55840

C#秒杀Java五个不可替代特性,完美的编程语言并不存在

1.LINQ LINQ (Language-Integrated Query,语言集成查询) 于 2007 年引入到 C#,以帮助开发人员各种数据源查询数据。...例如,我们来看看这个代码,用于在 C#列表中过滤 2 位数。 首先,在不使用 LINQ 情况下: ? 如果使用 LINQ 查询语法形式: ? 或者方法语法形式: ?...一个结构体和一个类之间最大区别在于结构类型,而类引用类型。 相比于创建类,编写结构体最重要好处在构造一个值类型时比在构造引用类型时更容易确保值语义。...如 Microsoft 文档所述,“struct 类型变量直接包含结构体数据,而类类型变量包含对数据引用。”...因此,对比使用类时,使用结构体好处之一代码其他部分更改其值唯一方法将其作为参考进行显式传递。

2.8K100

C# 方法与参数 常见命名空间汇总 using使用 main方法参数

本文主要讲 C# 常见命名空间 using static 指令 && 调用静态方法 嵌套命名空间&&作用 别名 Main() 方法 ---- C# 常见命名空间 命名空间 作用 System...创建文件默认引入,处理数学计算、、环境变量、输出控制台、垃圾回收器及一些常见异常和特征。...using static 只针对静态类型有效! ---- 嵌套命名空间&&作用 命名空间也有作用,离开作用类型将无法使用。但命名空间引入,不像变量声明那么“任性”。...命名空间引入使用using指令,using指令可以在命名空间外、命名空间内顶部并且在类外面使用。 在命名空间外使用using指令作用 该文件下所有命名空间。...在命名空间内使用using指令作用 该命名空间内。 下面一个例子。

1.3K40

C# 发展历史及版本新功能介绍

处理数据库和其他包含不可赋值元素数据类型时,能够将 null 赋值给数值类型和布尔类型会特别有用。 例如,数据库中布尔字段可以存储值 true 或 false,也可以处于未定义状态。...到达迭代器方法结尾时,循环便已完成。 协变和逆变 在 C# 中,协变和逆变能够实现数组类型、委托类型和泛型类型参数隐式引用转换。 协变保留分配兼容性,逆变则与之相反。...括号内两个或更多输入参数使用逗号加以分隔: C#复制 (x, y) => x == y 有时,编译器难以或无法推断输入类型。...回顾过去,这些功能中大多数似乎都是不可或缺,难以分割。 它们组合都是经过巧妙布局。 我们通常认为 C# 版本杀手锏查询表达式,也就是语言集成查询 (LINQ)。...重点缩减了使用 out 关键字变量声明,并通过元组实现了多个返回值。 但 C# 用途更加广泛了。 .NET Core 现在面向所有操作系统,着眼于云和可移植性。

4.1K20

C#3.0新增功能09 LINQ 基础04 基本 LINQ 查询操作

本篇介绍 LINQ 查询表达式和一些在查询中执行典型操作。 获取数据源 在 LINQ 查询中,第一步指定数据源。 和大多数编程语言相同,在使用 C# 时也必须先声明变量,然后才能使用它。...当执行查询时,范围变量将充当对 customers 中每个连续元素引用。 由于编译器可以推断 cust类型,因此无需显式指定它。 可通过 let 子句引入其他范围变量。...对于非泛型数据源(例如 ArrayList),必须显式键入范围变量。 有关详细信息,请参阅如何:使用 LINQ 查询 ArrayList (C#) 和 from 子句。...由于 Name字符串,默认比较器将按字母顺序 A 到 Z 进行排序。...例如,可通过执行联接来查找所有位置相同客户和分销商。 在 LINQ 中,join 子句始终作用于对象集合,而非直接作用于数据库表。

3.4K20

C# dynamic

1.概要 在C#编程中,dynamic一种特殊数据类型,引入于C# 4.0版本。...简化LINQ查询: 在LINQ查询中,有时查询结构在编译时难以确定,dynamic类型可以用于处理这种不确定查询结果,使得LINQ查询更加灵活。...当dynamic变量脱离作用后GC如何处理它 dynamic变量脱离作用后,其内存会由垃圾回收器(Garbage Collector,GC)处理。...与其他局部变量一样,当dynamic变量超出其作用范围时,它所占用内存空间将被标记为可回收。...垃圾回收器会在程序运行时适当时机自动检测这些不再被引用对象,并释放它们占用内存,以便将内存重新分配给新对象。 dynamic相比其他数据类型会有性能问题吗?

18440

c#可空类型和空合并操作符(Nullable Types 和 Null Coalescing Operator)

在本文中,我们将讨论可空类型和空合并操作符以及如何在基于c#代码中使用它们。 这是c#编程中一个基本概念。在这里,我将解释可空类型c#空合并操作符,以及如何在LINQ中使用该操作符。...c#数据类型分为两大类:值类型引用类型。 值类型变量不能为空,但是我们可以在引用类型变量中指定一个空值。 让我们检查当我们给值类型赋空时将会发生什么。 ?...有两种方法可以解决这个问题: Nullable x = null; int ? x = null; 上面展示了在c#中将非空值类型转换为空值类型两种方法。...c#一个重要运算符。根据MSDN定义:?操作符称为null-coalescing操作符,用于为可空值类型引用类型定义一个默认值。它返回左操作数,如果操作数不为空;否则,它返回正确操作数。...现在我向你们展示这个运算符如何在LINQ中使用

4K20

.net面试题常见有答案(java中级开发面试题)

事件和委托关系。 委托(Delegate) 存有对某个方法引用一种引用类型变量引用可在运行时被改变。 事件在类中声明且生成,且通过使用同一个类或其他类中委托与事件处理程序关联。.../6.在C#中值类型引用类型区别 值类型: 基本: (1)直接包含数据 (2)离开作用将被内存中清除 存储: (1)值类型变量将直接存储数据,并存储在内存堆栈中 (2)堆栈内存地址高位存储数据...存储: (1)引用类型变量只存储数据内存地址引用,数据存储在托管堆中 (2)托管堆内存地址低位存储数据 操作: (1)操作引用类型引用数据内存地址 //8.跳转语句break,continue,...return各有什么作用,分别适用什么环境 Break: 直接跳出当前循环,当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试。...Queue 队列:队列一种先进先出数据类型,常用操作有两种,分别是入列出列,入列元素添加到队尾,出列元素队头取出 5.

63530

C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托

.NET/C#面试手册:基础语法 .NET/C#面试手册:面向对象 .NET/C#面试手册:集合、异常、泛型、LINQ、委托、EF!...将类型参数化以达到代码复用提高软件开发工作效率一种数据类型。泛型类引用类型堆对象,主要是引入了类型参数这个概念。...泛型集合和ArrayList装箱拆箱### 装箱:类型转换成引用类型 拆箱:引用类型转换成值类型 下面的例子借鉴官方一段代码: System.Collections.ArrayList...参数一个object类型,也就是说ArrayList添加任何引用类型或值类型都会隐士转换成Object,这个时候便发生装箱操作,在遍历检索它们时必须object 类型转换成指定类型,这个时候便发生拆箱操作...: “类型Product必须不可以为NUll值得类型”,引用类型默认值就是NULL,所以该房型方法类型参数不能引用类型,这就是使用类型参数约束好处。

2.5K30

C#3.0新增功能09 LINQ 基础08 支持 LINQ C# 功能

通过使用 var,可以创建匿名类型但它只能用于本地变量。 也可以使用隐式类型声明数组。 有关详细信息,请参阅隐式类型局部变量。...,例如 OrderSize,但执行对象初始化后,查询返回数据被定型为所需数据类型;我们选择与我们类相关数据。...上述代码也可以使用 LINQ 方法语法编写: var newLargeOrderCustomers = IncomingOrders.Where(x => x.OrderSize > 5).Select...标准查询运算符一组扩展方法,它们为实现 IEnumerable 任何类型提供 LINQ 查询功能。 有关详细信息,请参阅扩展方法。...有关详细信息,请参见: 匿名函数 Lambda 表达式 表达式树 (C#) 其他技术请参阅 语言集成查询 (LINQ) (C#)

1.9K30

C# 语言中Lambda(拉姆达) 表达式介绍

使用基于方法语法在 Where 类中调用 Enumerable 方法时(如在 LINQ to Objects 和 LINQ to XML中一样),参数委托类型 System.Func<T,TResult...括号内两个或更多输入参数使用逗号加以分隔: C# (x, y) => x == y 有时,编译器难以或无法推断输入类型。...Lambda 表达式中变量范围 在定义 lambda 函数方法内或包含 Lambda 表达式类型内,Lambda 可以引用范围内外部变量(请参阅匿名方法)。...: 捕获变量将不会被作为垃圾回收,直至引用变量委托符合垃圾回收条件。...在外部方法中看不到 lambda 表达式内引入变量。 Lambda 表达式无法封闭方法中直接捕获 in、ref 或 out 参数。 Lambda 表达式中返回语句不会导致封闭方法返回。

7K40

LINQ凭什么被誉为有史以来最好技术?

免责声明:笔者主要是在C#上使用该技术,但是它至少有针对Python和PHP包装器/副本,因此其一般原理在其他语言中也适用。 LINQ是什么?...Lambda函数较为独特,表示为x =>,如果以前从未使用过该函数,可能需要一些时间来理解。它基本上一个内联函数声明,能够引用被调用列表中各个元素。...本质上,它是Any()和x组合,无非有一个更长包装器而已,用于检测循环检查列表中元素是否满足必需参数。如果,则返回true。 所以说真的,LINQ只是披着华丽外衣一串循环函数。...在最糟糕情况下,须对IQueriable类型进行一些类型转换,此时,你所选择IDE甚至可以有所帮助。 笔者通常会对百利而无一害软件持怀疑态度,但使用了LINQ多年,并没有发现不妥之处。...列表中只返回一个属性(内联类型转换): string name = customers.Select(x => x.name) 获取最早或最新未完成任务: tasks.Max(x => x.dateOfEntry

1.1K00

Unity性能调优手册10C#优化:GC,对象池,forforeach,string,LINQ

New引用类型 首先,这是一个非常简单GC.Alloc发生。...,但它在内部缓存以避免第二次GC.Alloc 然而,代码安全性和可读性角度来看,将所有变量和方法都设置为静态不太容易接受。...此外,一些LINQ方法针对调用者类型进行了优化,因此GC大小。根据调用者类型分配更改。...使用LINQ时分配,如何减少分配,以及延迟评估关键点。在本节中,我们将解释使用LINQ标准。前提LINQ一个有用语言特性,但它使用将会与不使用脚本相比,脚本(c#)使堆分配和执行速度变差。...int y) { return x * y; } 另一方面,内联缺点代码大小会随着方法内进程扩展而增加。

59310

C#新语法(持续更新)

Using资源管理  在C#8中实现了Idisposable/IAsyncDisposable接口类型变量声明前加上using,当代码执行 离开变量作用时,对象就会被释放。... 在之前版本C#中,类型必须定义在namespace中,c#10开始可以采用如下写法,减少namespace大括号嵌套 namespace ConsoleApp2; internal class...1、csproj中enable启用可空引用类型检查。 2、在引用类型后添加“?”修饰符来声明这个类型可空。对于没有添加“?”...修饰符引用类型变量,如果编译器发现存在为这个变量赋值null可能性时候,编译器会给出 警告信息。...来抑制编译器警告。 记录(record)类型 C#==运算符默认判断两个变量指向是否同一个对象,即使两个对象内容完全一样,也不相等。

7610

带你了解C#每个版本新特性

本文梳理下C#1.0到7.0版本一些常用特性,对于不常用或者我没有用到过一些特性,会列出来,但不会做详细描述。...C#1.X C# VS版本 CLR版本 .NET Framework 1.0 VS2002 1.0 1.0 1.1 VS2003 1.1 1.1 在C#1.0或1.1版本中,语言角度就是基本面向对象语法...泛型约束通过关键字where来实现,C#2中泛型约束有4种: 引用类型约束:确保类型实参引用类型,使用where T:class来表示; 值类型约束:确保类型实参类型,使用where T:truct...动态类型 C#使用dynamic来实现动态类型,在没用使用dynamic地方,C#依然静态。...Null条件运算符 在C#中,一个常见异常就是“未将对象引用到对象实例”,原因引用对象没有做非空判断导致。在团队中虽然再三强调,但依然会在这个问题上栽跟头。

3.5K20

C#3.0新增功能08 Lambda 表达式

如果在 System.Linq.Queryable 类中调用 Queryable.Select 方法(就像在 LINQ to SQL 中一样),参数类型表达式树类型 Expression<Func<TSource...含标准查询运算符 lambda 在其他实现中,LINQ to Objects 有一个输入参数,其类型泛型委托 Func 系列中一种。...lambda 表达式中变量范围 在定义 lambda 表达式方法内或包含 lambda 表达式类型内,lambda 可以引用范围内外部变量(请参阅匿名方法)。...: 捕获变量将不会被作为垃圾回收,直至引用变量委托符合垃圾回收条件。...在封闭方法中看不到 lambda 表达式内引入变量。 lambda 表达式无法封闭方法中直接捕获 in、ref 或 out 参数。

1.6K40
领券