小编Wil*_*den的帖子

从IEnumerable <IEnumerable <T >>获取IEnumerable <T>

公共课项{...}

public class Order
{
    public List<Item> Items
    ...
}

public class Customer
{
    public List<Order> Orders
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,使用LINQ我需要获得客户购买的所有商品.我怎么能够?

我尝试了类似var items = from o in cust.Orders select o.Items;但结果是IEnuberable<List<Item>>,我只想一个IEnumerable<Item>.

我在这里要求尽量避免编码2个循环.

.net c# linq ienumerable

10
推荐指数
1
解决办法
588
查看次数

这是在C#中引发事件的有效模式吗?

更新:为了所有阅读本文的人的利益,自.NET 4起,由于自动生成事件同步的变化,锁定是不必要的,所以我现在就使用它:

public static void Raise<T>(this EventHandler<T> handler, object sender, T e) where T : EventArgs
{
    if (handler != null)
    {
        handler(sender, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

并提出它:

SomeEvent.Raise(this, new FooEventArgs());
Run Code Online (Sandbox Code Playgroud)

在阅读过Jon Skeet 关于多线程文章之后,我试图将他提倡的方法封装在像这样的扩展方法中引发事件(使用类似的通用版本):

public static void Raise(this EventHandler handler, object @lock, object sender, EventArgs e)
{
    EventHandler handlerCopy;
    lock (@lock)
    {
        handlerCopy = handler;
    }

    if (handlerCopy != null)
    {
        handlerCopy(sender, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以这样调用:

protected virtual void OnSomeEvent(EventArgs e)
{
    this.someEvent.Raise(this.eventLock, this, e);
}
Run Code Online (Sandbox Code Playgroud)

这样做有什么问题吗? …

c# events multithreading locking thread-safety

10
推荐指数
1
解决办法
2332
查看次数

是否有任何C#集合,其中修改不会使迭代器失效?

C#Collections库中是否有任何数据结构,其中结构的修改不会使迭代器失效?

考虑以下:

List<int> myList = new List<int>();
myList.Add( 1 );
myList.Add( 2 );
List<int>.Enumerator myIter = myList.GetEnumerator();
myIter.MoveNext();  // myIter.Current == 1
myList.Add( 3 );
myIter.MoveNext();  // throws InvalidOperationException
Run Code Online (Sandbox Code Playgroud)

.net c# collections iterator

10
推荐指数
4
解决办法
2463
查看次数

抽象方法声明 - 虚拟?

在MSDN上,我发现在抽象方法声明中使用"虚拟"修饰符是错误的.我的一位同事应该是非常有经验的开发人员,但在他的代码中使用了这个:

public abstract class BusinessObject   
{
    public virtual void Render(){}
    public virtual void Update(){}
}
Run Code Online (Sandbox Code Playgroud)

它也正确与否?

c# oop abstract-class

10
推荐指数
3
解决办法
3298
查看次数

将PDF转换为字符串

如何阅读PDF文件并将内容放入字符串?使用PHP语言.

php pdf file-conversion

8
推荐指数
1
解决办法
3万
查看次数

如何获取目录中的所有文件?

为什么这不起作用?

find . -maxdepth 1 -type f -print0 | xargs -0 .
Run Code Online (Sandbox Code Playgroud)

我得到的只是xargs: .: Permission denied.

bash

8
推荐指数
1
解决办法
4276
查看次数

我在哪里可以了解C#中普查员的来龙去脉?

是否有一个很好的资源可以解释枚举器和自定义枚举器的概念?特别是有一个很好的例子,说明为什么你想要IEnumerable自己实现以及如何有效地使用它?

我偶尔会碰到yield,我正试图更好地理解它.

.net c# ienumerable

7
推荐指数
1
解决办法
224
查看次数

.NET 4.0中新的"动态"变量类型是否解决了CLR中的单/多方法调度问题?

单个调度的问题对于使用Java和C#等静态类型语言进行编码的人来说大多是熟悉的.基本思路是:

虽然运行时多态性允许我们根据类型(运行时类型)调度到正确的方法调用receiver,例如:

IAnimal mything = new Cat();
mything.chop();
Run Code Online (Sandbox Code Playgroud)

方法调用将根据运行时类型执行mything,即Cat.这是单一调度功能(存在于Java/C#中).

现在,如果您不仅需要调度接收器的运行时类型,还需要调度(多个)参数的类型,那么您将面临一个小问题:

public class MyAcceptor {  
    public void accept (IVisitor vst) {...}   
    public void accept (EnhancedConcreteVisitor vst) {...}  
}
Run Code Online (Sandbox Code Playgroud)

第二种方法永远不会被调用,因为在我们的"消费者"代码中,我们倾向于通过常见的超类型或接口来处理不同类型的对象(在我的示例中为访问者).

这就是我问的原因 - 因为动态类型允许多重调度多态,C#4.0有动态关键字;)

.net c# multiple-dispatch dynamic-typing c#-4.0

7
推荐指数
1
解决办法
1154
查看次数

注册流程开始时间的最佳方法是什么?

我正在编写一个程序,必须记录启动记事本等过程的时间.我认为创建一个每秒检查所有进程的Timer是很好的.但我认为它会减慢用户的计算机速度.有没有更好的方法呢?

c# timer process

7
推荐指数
1
解决办法
1136
查看次数

仅在x轴上没有小的网格线

我正在尝试生成一个图,其中y轴有主网格线和次网格线,而x轴只有主网格线.

它足够简单,可以禁用两个轴上的小网格线,如下所示:

axes.grid(False, which='minor')
Run Code Online (Sandbox Code Playgroud)

但我找不到一种方法只将其应用于一个轴.我错过了什么吗?

python matplotlib

7
推荐指数
1
解决办法
1381
查看次数