可能重复:
var关键字有什么意义?
我不是在问它是如何运作的.我不是在问它是否会影响性能.我已经知道那些答案了.
我想知道MS C#团队首先将它添加到语言中的原因.你不会在语言中加入无聊的东西.一定有一个值得注意的问题.这是什么问题?
我见过的"它解决的问题"最接近的例子是使用匿名类型时,如下所示:
var linqResult = from element in SomeCollection s
elect new { element.A, element.B }
Run Code Online (Sandbox Code Playgroud)
具有讽刺意味的是,样式和编码标准指南(例如Microsoft提供的)建议编码人员避免在结果类型不明显时使用'var'.换句话说,'var'的(推测)预期目的与编码标准指南相冲突.
如果我正在编写编码标准,并试图防止过度使用'var',我有点倾向于说"仅使用'var'来回应匿名类型." 但这带来了问题的全方位:将"var"添加到语言中的目的是什么?
我一般对Java-11感到好奇,但特别是JEP:323计划将var声明添加到Lambda操作变量.
这个功能背后的动机在这里很好地讨论.请考虑以下文章中的引用:
// #1 - Legal
ITest divide = (@ATest var x, final var y) -> x / y;
/* #2 Modifiers on Old-Style implicit paramaters => Illegal */
ITest divide = (@ATest x, final y) -> x / y;
Run Code Online (Sandbox Code Playgroud)
最终修饰符的使用对我来说很清楚,并且符合不变性最佳实践.
但是,我不确定注释.能够注释lambda隐式参数有什么好处?
你能提供一个在lambda操作变量上使用注释的事实上的有益例子吗?这不是一个意见问题,而是作为使用此功能时更具可读性或效率的代码的实际示例.
我知道JavaScript变量指向一个值:
var foo = true;
//... later
foo = false;
Run Code Online (Sandbox Code Playgroud)
所以在那个例子中我改变了foo指向true- > foo指向false,但如果我这样做:
for (var i=0; i<100; i++){
var someVar = i;
}
Run Code Online (Sandbox Code Playgroud)
我是否为每次迭代创建了一个新的var?
以下两种方法有什么不同吗?
var myvar;
for (var i=0; i<100; i++){
myvar = i;
}
Run Code Online (Sandbox Code Playgroud)
和
for (var i=0; i<100; i++){
var myvar = i;
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我使用以下代码将一些Json转换为动态对象.当我在动态类型的属性上使用DateTime.Parse时,我希望var猜测它的类型是DateTime ......相反,它保持动态.这不可能是对的,可以吗?
完整的例子如下.
var settings = new JavaScriptSerializer().Deserialize<dynamic>(json);
var startDate = DateTime.Parse(settings.startDate);
var endDate = DateTime.Parse(settings.endDate);
var userId = int.Parse(settings.userId);
Run Code Online (Sandbox Code Playgroud)
startDate,endDate和userId都是动态的,这意味着我不能在以后的Lambda表达式中使用它们.显然,我可以用以下代码修复代码:
DateTime startDate = DateTime.Parse(settings.startDate);
DateTime endDate = DateTime.Parse(settings.endDate);
int userId = int.Parse(settings.userId);
Run Code Online (Sandbox Code Playgroud)
..但似乎编译器正在做出"糟糕的猜测".任何人都可以向我解释这个吗?
谢谢
我知道我应该总是使用'var'来定义函数中的局部变量.
当我定义一个全局函数时,使用'var'之间有什么区别?
我在互联网上看到的一些代码示例使用
var globalVar = something;
globalVar = something;
Run Code Online (Sandbox Code Playgroud)
有什么不同?
我有一个带有Objective-C和基于Swift的视图控制器的应用程序.我以编程方式从我的一个基于Objective-C的视图控制器打开一个基于Swift的视图控制器.我遇到的问题是我无法从Objective-C代码访问Swift变量.
我的Swift代码:
@IBOutlet weak var profPicture: UIImageView!
@IBOutlet weak var profVerified: UIImageView!
@IBOutlet weak var profName: UILabel!
var passedUser:PFUser!
Run Code Online (Sandbox Code Playgroud)
我的Objective-C代码:
MyProfileViewController *screen = [[MyProfileViewController alloc] initWithNibName:@"Main" bundle:nil];
self.dataPass = screen;
dataPass.profName.text = @"";
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:screen animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
我能够访问像IBOutlets这样的@属性,但是我无法访问和编辑var对象.
我这样做,因为当我呈现基于Swift的视图控制器时,我想从基于Objective-C的视图控制器将数据传递到基于Swift的视图控制器.
为什么我不能访问var对象?
这是我得到的错误:
错误如下:
在'MyProfileViewController*'类型的对象上找不到属性'passUser'
谢谢你的时间,丹.
似乎越来越多我读过的C#代码使用var类型标识符:
foreach (var itemChange in ItemChanges)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
而不是明确说明类型:
foreach (ItemChange itemChange in ItemChanges)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
即使知道类型.
我仍在使用后一个显式版本,因为我认为稍后阅读它会更快地了解变量的类型,而不是使用var.
但是否有任何技术理由使用其中一种?
可能的重复:
var关键字的重点是什么?
在C#中使用var关键字
我理解IEnumerable<...>数据类型如何使代码的可读性降低或嵌套泛型看起来有点令人生畏.但除了代码可读性之外,使用var而不是显式类型是否有优势?看起来通过使用显式类型,您最好传达变量的功能,因为您知道它是什么.
如果它是工作场所编码标准,我会为了团队合作而使用它.然而,在我自己的项目中,我更愿意避免使用var.
我是LINQ的新手,需要一些编码方面的帮助.
目前,我有一个字符串和一个var变量.
string temp = "from product in myEntities.Products where product.Name.Contains(_Name) select product";
var _Products = temp;
LvProducts.DataSource = _Products;
LvProducts.DataBind();
Run Code Online (Sandbox Code Playgroud)
基本上,我想要做的是能够通过预先将其分配到字符串中来创建自定义/复杂的LINQ查询.完成编写后,我将字符串分配给var变量.但是,这显然是行不通的.因此,任何人都可以帮助我吗?
C#,VS 2010.有人,请解释为什么我不能var在下面的代码中使用!
var props = TypeDescriptor.GetProperties(adapter);
// error CS1061: 'object' does not contain a definition for 'DisplayName'
foreach (var prop in props)
{
string name = prop.DisplayName;
}
// No error
foreach (PropertyDescriptor prop in props)
{
string name = prop.DisplayName;
}
Run Code Online (Sandbox Code Playgroud)
TypeDescriptor.GetProperties返回PropertyDescriptorCollection带有实例的PropertyDescriptor.为什么编译器看不到这个?
var ×10
c# ×6
javascript ×2
linq ×2
annotations ×1
c#-4.0 ×1
coding-style ×1
conventions ×1
dynamic ×1
global ×1
ios ×1
java ×1
java-11 ×1
lambda ×1
objective-c ×1
properties ×1
scope ×1
string ×1
swift ×1
variables ×1