C# 中的“var”是不是类似于 C 中的“size_t”?

Posted

技术标签:

【中文标题】C# 中的“var”是不是类似于 C 中的“size_t”?【英文标题】:Is "var" in C# analagous to "size_t" in C?C# 中的“var”是否类似于 C 中的“size_t”? 【发布时间】:2010-02-01 05:32:18 【问题描述】:

由于教授的坚持,我已经习惯在我的 C++ 代码中通过 C 使用 size_t,我很好奇 C# 中的 'var' 是否是同一种东西?

【问题讨论】:

【参考方案1】:

他们没有任何关系!

var 用于自动类型推断(编译器根据初始化程序的返回类型计算出变量的类型(如 C++1x 中的auto)。

size_t 在 C 中只是一个无符号整数类型。

【讨论】:

【参考方案2】:

两者之间存在巨大差异。

size_t用来表示一个对象的大小,由sizeof返回。这不是声明变量的通用方式。

var 是一种隐式声明变量的方式。

【讨论】:

【参考方案3】:

如果您问var 的使用是否与size_t 一样,因为您实际上不需要使用size_t,您可以使用int,那么是的,它们有点像在这方面类似。

但是,它们的不同之处在于,size_t 是关于使您的代码更加明确,而 var 是为了提高可读性而删除一些多余的明确性。

所以下面代码的可读性可以用var来提高:

Dictionary<string, Dictionary<int, char>> mapping = new Dictionary<string, Dictionary<int, char>>();

-- 对比--

var mapping = new Dictionary<string, Dictionary<int, char>>();

但是,过度使用var 会损害可读性,例如var f = Foo();

size_t 不同,使用var 编译的代码与使用显式类型编译的代码完全没有区别。

使用size_t,好处之一是可移植性。对象大小可能不是所有平台上的int,但size_t 总是足够大以容纳它们。这意味着不使用size_t 可能意味着您的代码无法在某些平台上正确编译。

但是,使用var,在其末尾编译的代码完全相同。你可以在任何可能的地方使用var,或者你永远不能使用var(anonymous types 除外),这没有任何区别。

因此,虽然建议您始终在 C 语言中尽可能使用size_t,但var 更像是一个判断电话。这就是您认为使代码更具可读性的原因。

【讨论】:

【参考方案4】:

C# var 关键字最类似于 C++0x 'auto' 关键字,后者与 type inference 相关,其中存储类型是从表达式中推断出来的,而不是与平台无关的方式来指定对象。

在 C 中没有直接的等价物。

【讨论】:

【参考方案5】:

不是。我不知道 c++ size_t,但我知道 C# 中的 var 与显式声明变量完全相同,与运行时无关。

【讨论】:

【参考方案6】:

不,varsize_t 不一样。

它们具有相似的功能:它们都将局部变量的类型声明为语句的一部分。但这就是它们的相似之处。

varsize_t 声明的变量具有特定类型:size_t 的类型为 size_t,通常是 typedefed 作为 unsigned intvar 声明类型必须由编译器从语句的其余部分推断出来;它可能是int,可能是string,可能是List&lt;MyClass&gt;...编译器通过分析语句的其余部分来计算。

【讨论】:

以上是关于C# 中的“var”是不是类似于 C 中的“size_t”?的主要内容,如果未能解决你的问题,请参考以下文章

javascript中是不是有类似于php中的compact的功能?

c# 弹出式对话框 类似于c语言中的messagebox

iOS 5 中的 NSJSONSerialization 类似于 c# 序列化到类

TryParse 适用于 var 但不适用于 C# 中的对象?

如何找出 C# / .NET 中是不是存在文件?

c#中的var关键字和object关键字的区别,顺便介绍下object的使用方法以及好处。