我有一个FileInfo序列,但我只关心它们的字符串名称,所以我想要一个字符串序列.起初我尝试过这样的事情:
Seq.map (fun fi -> fi.Name) fis
但由于某种原因,F#的类型推断不足以允许这样做,并让我明确地给"fi"类型:
Seq.map (fun (fi : FileInfo) -> fi.Name) fis
为什么需要这个注释?如果知道那个fis : seq<FileInfo>,那么Seq.map : ('a -> 'b) -> seq<'a> -> seq<'b>,它不应该推断lambda表达式的类型是FileInfo -> 'b,然后,从而fi.Name : string进一步推断它的类型是FileInfo -> string?
我下面的演练如何使用的EntityFramework WPF结合.我决定玩async/await,因为我之前从未真正有机会使用它(我们刚从VS2010/.NET 4.0转移到VS2013/.NET 4.5).让保存按钮处理程序变为异步是轻而易举的,并且在等待SaveChangesAsync()时,UI仍然保持响应(我可以拖动窗口).然而,在窗口加载处理程序中,我遇到了一个小问题.
    private async void Window_Loaded(object sender, RoutedEventArgs e)
    {
        EnterBusyState();
        var categoryViewSource = (CollectionViewSource)FindResource("categoryViewSource");
        _context = await Task.Run(() => new Context());
        await Task.Run(() => _context.Categories.Load());
        //await _context.Categories.LoadAsync();
        categoryViewSource.Source = _context.Categories.Local;
        LeaveBusyState();
    }
当我使用第一种加载_context.Categories的方式时,UI仍然保持响应,但是当我用下面的注释掉的行代替时,UI会在实体加载时冻结一小段时间.有没有人解释为什么前者有效而后者无效呢?这不是什么大不了的事情,只是在第二行无法工作的时候,至少根据我迄今为止研究过的async/await,它应该是不行的.