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】:不,var
和 size_t
不一样。
它们具有相似的功能:它们都将局部变量的类型声明为语句的一部分。但这就是它们的相似之处。
var
和 size_t
声明的变量具有特定类型:size_t
的类型为 size_t
,通常是 typedef
ed 作为 unsigned int
。 var
声明类型必须由编译器从语句的其余部分推断出来;它可能是int
,可能是string
,可能是List<MyClass>
...编译器通过分析语句的其余部分来计算。
【讨论】:
以上是关于C# 中的“var”是不是类似于 C 中的“size_t”?的主要内容,如果未能解决你的问题,请参考以下文章
javascript中是不是有类似于php中的compact的功能?
iOS 5 中的 NSJSONSerialization 类似于 c# 序列化到类