小编kas*_*rhj的帖子

Lambda表达式作为函数参数

我有以下代码

List<int> GetIndices<T>(List<T> list, ?????? condition
{
    var result =
            list
                .Select((p, index) => index)
                .Where(condition);

    return result.ToList();
}
Run Code Online (Sandbox Code Playgroud)

我想称之为 GetIndices(someList, (p, index) => (someList[index].Height < someList[index - 1].Height))

什么是正确的类型condition

c#

6
推荐指数
1
解决办法
1502
查看次数

与WPF MVVM中的TAP(async/await)异步

我正在寻找以下设置的最佳实践.

View是绑定到ViewModel的数据(通过WPF).ViewModel通过INotifyPropertyChanged更新视图.模型通过事件更新ViewModel.模型知道来自外部世界的东西,比如如何通过WebClient从互联网上获取东西,以及如何从数据库中检索数据.

获取和发送外部世界的东西应该异步完成,以便UI(以及扩展,用户)不会在外面世界等待.

最好的做法是什么?

1. ViewModel应负责异步调用模型方法.
这将具有能够写出类似的东西的优点

GetWebPage(string url) {
  var result = await Model.GetWebPageAsync(url);
  Url = result.Url;
}
Run Code Online (Sandbox Code Playgroud)

在ViewModel中,Url使用INotifyPropertyChanged更新View的ViewModel属性.甚至

GetWebPage(string url) {
  var result = await Model.GetWebPageAsync(url);
  _view.Url = result.Url;
}
Run Code Online (Sandbox Code Playgroud)

在哪里我们可以一起避免INotifyPropertyChanged.您更喜欢以下哪种方式?

但是,让Model本身进行异步工作可能更为明智.我们可能希望能够在没有View和ViewModel的情况下使用Model,同时仍然可以异步工作.另一个论点是,谁更清楚模型什么东西最好是异步处理.

2. Model自己处理所有异步内容.ViewModel代码变得更像

GetWebPage(string url) {
  Model.GetWebPage(url);
}
Run Code Online (Sandbox Code Playgroud)

在模型中

GetWebPage(string url) {
  var result = await Model.GetWebPageAsync(url);
  if (UrlChanged != null);
     UrlChanged(this, new UrlChangedEventArgs(url));
}
Run Code Online (Sandbox Code Playgroud)

ViewModel可以订阅,并相应地更新View.

您认为哪种方式是最佳做法?

c# wpf mvvm

6
推荐指数
1
解决办法
762
查看次数

在Caliburn.Micro中缓解传递属性类似于Catel的[ExposeAttribute]

Caliburn.Micro与Catel的 [ExposeAttribute]有类似的功能吗?

还有其他方法可以简化Caliburn.Micro中传递属性的工作吗?(即模型中的属性,但也在ViewModel中,以允许View访问属性.)

caliburn.micro

6
推荐指数
1
解决办法
492
查看次数

在列表中命名元组

我有以下清单

a = [[a1, b1, c1, [d1, e1, f1],
     [a2, b2, c2, [d2, e2, f2],
     [a3, b3, c3, [d3, e3, f3]]
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它变成一个命名元组列表

a[0].val1
>>> a1
a[1].val2
>>> b2
a[0].box
>>> [d1, e1, f1]
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
1
解决办法
5473
查看次数

最好是减少循环?

我记得很久以前就听说过,在编程微处理器时,循环递减而不是递增是更有效的.这是真的,如果是的话,原因是什么?

c c# vhdl

5
推荐指数
1
解决办法
1053
查看次数

IO完成端口是否在完成端口报告之前或之后生成新线程?

我对IO完成端口完成时实际发生的事情感到有些困惑.

我假设Win API允许访问IOCP队列,该队列能够以某种方式对具有特定句柄的回调引用进行排队(或堆栈)(比如说套接字).当Windows从NIC接收到中断时,它会在某个时刻到达NIC的IOCP队列并在其自己的(IOCP)线程池上执行回调.

我的问题是,来自线程池的线程是在接收到中断时产生的,还是在调用Win API时实际产生的,有效地使线程处于等待状态,直到它被IOCP唤醒队列?

编辑:
我发现了这个:http://msmvps.com/blogs/luisabreu/archive/2009/06/04/multithreading-io-and-the-thread-pool.aspx其中是状态:"每当该操作完成时,它将在该I/O完成端口上对数据包进行排队.然后该端口将继续并使用其中一个线程池的线程来运行您指定的回调."

windows winapi iocp

5
推荐指数
1
解决办法
488
查看次数

如何在C#中使指针通用?

我有一个WriteableBitmap我使用不安全的方法来绘制像素.基本部分看起来像这样:

private unsafe void DrawBitmap(WriteableBitmap bitmap, byte[] pixels)
{
         // Boilerplate omitted... 

        fixed (byte* pPixels = pixels)
        {
            for (int y = 0; y < height; y++)
            {
                var row = pPixels + (y * width);
                for (int x = 0; x < width; x++)
                {
                    *(row + x) = color[y + height * x];
                }
            }
        }

        bitmap.WritePixels(new Int32Rect(0, 0, width, height), pixels, width*pf.BitsPerPixel/8, 0);
}
Run Code Online (Sandbox Code Playgroud)

但是,不确定用户想要绘制的是什么类型byte,并且使这个方法通用(即DrawBitmap<T>)是有意义的但是如何使pPixels类型的指针T*

是否有其他技巧可以使我的DrawBitmap …

c#

5
推荐指数
1
解决办法
140
查看次数

在IPython中将笔记本包含在另一台笔记本中?

我有一个笔记本,我打算用作其他笔记本的库.它有一些功能可以准备某些类型的文件等.

如何将笔记本包含在应该能够使用库笔记本中的功能的新笔记本中?

ipython-notebook

5
推荐指数
2
解决办法
1862
查看次数

通用函数的通用零

我有一个函数来计算序列的累积和.

let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
Run Code Online (Sandbox Code Playgroud)

虽然它看起来很通用,但整数0使它成为非泛型的,因此我不能用浮点序列调用该函数.

是否有一个通用的零可以替代我的硬编码0,或者可能是一种使函数通用的不同方式.

f# inline

5
推荐指数
1
解决办法
569
查看次数

始终在异步中使用线程池线程来继续

有没有办法指示F#始终在异步计算表达式中使用线程池线程来继续,而不管同步上下文如何?

f#

5
推荐指数
1
解决办法
121
查看次数

标签 统计

c# ×4

f# ×2

c ×1

caliburn.micro ×1

inline ×1

iocp ×1

ipython-notebook ×1

mvvm ×1

python ×1

vhdl ×1

winapi ×1

windows ×1

wpf ×1