Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用var'是否被认为是可接受的;s称为;捷径;在c#中?_C# - Fatal编程技术网

使用var'是否被认为是可接受的;s称为;捷径;在c#中?

使用var'是否被认为是可接受的;s称为;捷径;在c#中?,c#,C#,c#中var类型的一个用途似乎是快捷方式/简化/保存不必要的键入。我考虑过的一件事是: MyApp.Properties.Settings.Default.Value=1 那是一大堆不必要的代码。另一种方法是声明: using MyApp.Properties; --或-- 导致:appsettings.Default.Value=1或Settings.Default.Value=1 稍微好一点,但我想再短一点: var appsettings = MyFirstCSharpApp.Prope

c#中var类型的一个用途似乎是快捷方式/简化/保存不必要的键入。我考虑过的一件事是:

MyApp.Properties.Settings.Default.Value=1

那是一大堆不必要的代码。另一种方法是声明:

using MyApp.Properties;
--或--

导致:appsettings.Default.Value=1或Settings.Default.Value=1

稍微好一点,但我想再短一点:

var appsettings = MyFirstCSharpApp.Properties.Settings.Default;
appsettings.Value=1;

最后,它足够短,也可以用于其他令人烦恼的长通话,但这是一种公认的方式吗?我在考虑“快捷方式变量”是否总是指向我正在创建的任何快捷方式的现有实例?(显然不仅仅是本例中的设置)

只要代码清晰,就没有问题。

这是可以接受的代码,因为编译器会接受它并知道如何处理它。它在逻辑上是可接受的代码,因为它会在以后缩短代码。它实际上与实际定义变量类型(int/bool/whatever)没有什么不同,而不是说var。在studio中,将鼠标放在变量上会得到它的编译类型,因此不应该有任何实际问题。有些人可能会称之为懒惰,但懒惰是发明之母。只要你的代码没有变得不可读,我就看不出这会有多大问题。

事实上,var正是为了这个目的而被越来越多地使用:缩短代码

特别是在

MyClass myClass = new MyClass();
这是非常清楚的使用

var myClass = new MyClass();

顺便说一句,ReSharper可以帮助您强制执行var在任何地方都可以使用

对我来说似乎不错,它可以提高可读性,特别是如果您多次使用这么长的带符号的语法


另一方面,如果您多次使用索引属性或自动生成的属性(对于GETTER来说,它是动态工作的),那么对该属性的每次访问都会有性能影响。不过这是微观优化,所以可能不应该太担心这个问题。

请注意,您所引用的静态变量不会从您的下方发生变化。例如,以下内容会打断您的“快捷方式”:


当然,我并不是说你会写这样的代码,但我们在这里讨论的是全局变量。。。任何地方的任何代码都可以更改此引用。在
appsettings
中缓存引用在以下情况下可能很危险。。。与静态变量耦合的众多陷阱之一,IMO.

可能与我查看的插件重复,您能更具体地说明这有什么帮助吗?我假设我可以为我想要快捷方式的东西添加代码段,但这不会像var的帮助那样是一件“当下”的事情。@BrunoLM:无法找到太多关于子类使用“快捷方式”是否安全的信息。Resharper突出显示代码中可能用var关键字替换类型的区域。Resharper为var提供建议,例如“当初始值设定项显式声明类型时使用var关键字”。在你的情况下,我会犹豫使用var,因为初始化器中的类型不清楚。@brunolm你读过这个问题吗?var关键字和variablesthanks一样没什么关系。很高兴知道,这可能很少是个问题,但很高兴知道!如果您的方法和类遵循SRP(单一责任原则),并且简短扼要,并且您的变量的命名和声明与使用它们的一两行代码非常接近,对于变量的用途或类型,永远不应该有任何歧义……这篇文章不是OP的好例子。在VdesmedT的情况下,类型是显式的,在OP的情况下,类型不是。
var myClass = new MyClass();
var appsettings = MyFirstCSharpApp.Properties.Settings.Default;
MyFirstCSharpApp.Properties.Settings.Default = new DefaultSettings(); // new reference
appsettings.Value=1;