我一直在使用autoC++ 11标准中提供的新关键字来处理复杂模板类型,这是我认为它的设计目标.但我也用它来做:
auto foo = std::make_shared<Foo>();
Run Code Online (Sandbox Code Playgroud)
更加怀疑的是:
auto foo = bla(); // where bla() return a shared_ptr<Foo>
Run Code Online (Sandbox Code Playgroud)
我没有看到很多关于这个话题的讨论.似乎auto可能过度使用,因为类型通常是文档和健全性检查的一种形式.您在哪里绘制使用线auto以及此新功能的推荐用例是什么?
澄清:我不是要求哲学观点; 我要求标准委员会对该关键字的预期用途,可能还有关于如何在实践中实现该预期用途的评论.
旁注:此问题已移至SE.Programmers,然后返回Stack Overflow.关于这一点的讨论可以在这个元问题中找到.
这是一个问题,在编程时我总是想知道:在编写代码时要使用什么:
var myFiles = Directory.GetFiles(fullPath);
Run Code Online (Sandbox Code Playgroud)
要么
string[] myFiles = Directory.GetFiles(fullPath);
Run Code Online (Sandbox Code Playgroud)
VAR是新的,是一个隐式类型的局部变量,所以我们只能在本地使用,它具有类似的规则不能为空,等等,但我不知道如果我们使用它"正常"的任何优势.
"常"的部分说,不是在匿名类型,对象和集合初始化和查询表达式,其中这是使用var匿名对象的意图,所以我的意思是......就像上面的例子.
你的想法是什么?
我有ReSharper 4.5并且到目前为止发现它非常宝贵,但我有一个顾虑;
它似乎想要隐含每个变量声明(var).
作为一个相对较新的开发人员,在这方面我应该相信ReSharper多少钱?
从Paints Tab Headers的方法中获取以下代码片段.
TabPage currentTab = tabCaseNotes.TabPages[e.Index];
Rectangle itemRect = tabCaseNotes.GetTabRect(e.Index);
SolidBrush fillBrush = new SolidBrush(Color.Linen);
SolidBrush textBrush = new SolidBrush(Color.Black);
StringFormat sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
Run Code Online (Sandbox Code Playgroud)
Resharper希望我将所有5个改为var.我已经阅读了以下类似帖子,在C#中使用var关键字,但我想从ReSharper的角度来看.
该变种关键字摒弃了需要一个明确的类型声明,我有兴趣地阅读SO讨论时,它可能是适当的.
我还读过(但未使用过)Boo,它似乎通过使声明局部变量可选而更进一步.使用Boo,可以隐含类型和声明.
这让我想知道,为什么C#语言设计师根本不想包含一个var关键字?
更新:是的,var支持匿名类型,但匿名类型本身不需要var关键字...
var anon = new { Name = "Terry", Age = 34 };
Run Code Online (Sandbox Code Playgroud)
与
anon = new { Name = "Terry", Age = 34 };
Run Code Online (Sandbox Code Playgroud) 该var类型是否与VariantVB相同?何时object可以接受任何数据类型,这两者之间有什么区别?
我们的内部审计建议我们使用显式变量类型声明而不是使用关键字var.他们认为使用var"可能会在某些情况下导致意外结果".
var一旦代码编译成MSIL,我不知道显式类型声明和使用之间的任何区别.
审计员是一位受人尊敬的专业人士,所以我不能简单地拒绝这样的建议.
我需要从字节数组到字符串的非常快速的转换.字节数组是Unicode字符串.

我目前正在使用ReSharper的30天试用版,到目前为止,我对它的建议印象深刻.然而,一个建议让我感到困惑.
当我明确定义变量时,例如:
List<String> lstString = new List<String>();
Run Code Online (Sandbox Code Playgroud)
ReSharped添加了一条波浪形的绿线并告诉我:
使用隐式类型本地变量声明.
如果我按照其建议,ReSharper将代码行更改为:
var lstString = new List<String>();
Run Code Online (Sandbox Code Playgroud)
那么,从改变List<String>到a 是否会有某种性能提升var,或者这仅仅是ReSharper的一个特点?我一直被教导明确定义变量而不是使用动态更为优化.
可能重复:
在C#中使用var关键字
嗨,刚刚搬了工,我已经习惯var了很多.在我以前的工作中,我们做了大量的TDD和使用resharper.
在这项工作中,他们讨厌第三方工具,这里的开发人员说,一直使用并不好,var而且效率不如显式打字.
前段时间我想的一样,但现在我已经习惯了它,它使我的代码看起来更整洁.
我已经阅读了一些帖子,似乎是否有效率的混淆.我读到使用var生成相同的IL代码.它应该不那么有效吗?在其他地方,我读到即使使用var产生相同的IL代码,它必须找出它是什么类型.那么"推断"究竟意味着什么呢?
关于性能是否相同的一些澄清将是非常棒的.