根据此问题的答案,从RC升级到RTM是受支持且经过测试的升级路径.现在VS 2015 RTM已经出局了,我想做到这一点.但是,我找不到界面菜单来做到这一点.
如何将Visual Studio Community 2015 RC升级到RTM版本?
C#5引入了重大更改到超过在循环变量工作的方式封foreach声明,即众所周知的(细节中可以找到这个文章埃里克利珀).我想在Visual Studio中看到破坏前的更改行为.为此我使用以下代码创建了一个小型控制台应用程序:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var values = new List<int>() { 100, 110, 120 };
var funcs = new List<Func<int>>();
foreach (var v in values)
funcs.Add(() => v);
foreach (var f in funcs)
Console.WriteLine(f());
}
//this method does break compilation on C# versions that are older than C#5
public async void DoStuff()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
当使用C#5编译器编译时,显然会打印出来
110
120
130
Run Code Online (Sandbox Code Playgroud)
但是在我去之后Project|Properties|Build|Advanced,将编译器更改为C#3并评论了DoStuff …
我正在学习WPF和MVVM,当我尝试为viewmodel编写单元测试时遇到了问题,viewmodel的命令调用async方法.这个问题在这个问题中得到了很好的描述.这个问题也有一个解决方案:用一个额外的等待方法编写一个新的Command类,可以在单元测试中等待.但是因为我使用MvvmLight,所以我决定不写一个新类,而是继承内置RelayCommand类.但是,我似乎不明白如何正确地做到这一点.下面是一个说明我的问题的简化示例:
AsyncRelayCommand:
public class AsyncRelayCommand : RelayCommand
{
private readonly Func<Task> _asyncExecute;
public AsyncRelayCommand(Func<Task> asyncExecute)
: base(() => asyncExecute())
{
_asyncExecute = asyncExecute;
}
public AsyncRelayCommand(Func<Task> asyncExecute, Action execute)
: base(execute)
{
_asyncExecute = asyncExecute;
}
public Task ExecuteAsync()
{
return _asyncExecute();
}
//Overriding Execute like this fixes my problem, but the question remains unanswered.
//public override void Execute(object parameter)
//{
// _asyncExecute();
//}
}
Run Code Online (Sandbox Code Playgroud)
我的ViewModel(基于默认的MvvmLight MainViewModel):
public class MainViewModel : ViewModelBase
{
private …Run Code Online (Sandbox Code Playgroud)