小编Dav*_*ead的帖子

C#中构造函数的where子句?

所以这就是我想要做的.

我正在创建一个泛型类,它以两种方式之一分配泛型参数指定的类型,由使用哪个重载构造函数决定.

这是一个例子:

class MyClass<T>
    where T : class
{
    public delegate T Allocator();
    public MyClass()
    {
        obj = new T();
    }

    public MyClass( Allocator alloc )
    {
        obj = alloc();
    }

    T obj;
}
Run Code Online (Sandbox Code Playgroud)

此类要求类型T在所有情况下都是reftype.对于默认构造函数,我们希望通过其默认构造函数实例化T.我想where T : new()在我的默认构造函数上添加一个,如下所示:

public MyClass()
    where T : new()
{
    obj = new T();
}
Run Code Online (Sandbox Code Playgroud)

但是,这不是有效的C#.基本上我只想在类型T上添加约束,只有在使用MyClass()的默认构造函数时才有默认构造函数.

在MyClass的第二个构造函数中,我们让用户确定如何使用自己的分配方法为T分配,所以很明显,MyClass在所有情况下都不能强制执行T是默认构造.

我有一种感觉,我需要在默认构造函数中使用反射,但我希望不会.

我知道这可以做到,因为Lazy<T>.NET 4.0中的类不要求T在类级别上是默认可构造的,但它的构造函数与我的示例中的构造函数类似.我想知道Lazy<T>它至少是怎么回事.

c# generics

9
推荐指数
2
解决办法
2975
查看次数

MessageQueue.BeginReceive 如何工作以及如何正确使用它?

我目前有一个后台线程。在这个线程中是一个无限循环。

这个循环偶尔会更新数据库中的一些值,然后在 MessageQueue 上侦听 1 秒(使用queue.Receive(TimeSpan.FromSeconds(1)))。

只要没有消息进来,这个调用就会在内部抛出一个 MessageQueueException (Timeout),它被捕获,然后循环继续。如果有消息,调用通常会返回并处理消息,然后循环继续。

这会导致很多第一次机会异常(每秒一次,除非有消息要处理)并且这会导致调试输出垃圾邮件,并且当我忘记排除 MessageQueueExceptions 时也会在调试器中中断。

那么 MessageQueue 的异步处理意味着如何正确完成,同时仍然确保,只要我的应用程序运行,队列就会受到监控,并且数据库也会不时更新。当然这里的线程不应该占用100%的CPU。

我只需要大图或对正确完成异步处理的提示。

c# asynchronous msmq message-queue

4
推荐指数
1
解决办法
6631
查看次数

在f#中调用同一个类中的方法的问题

我试图在f#中实现我已经在c#中使用的东西,看看语法是多么简洁.我使用期权定价公式(黑色76)作为测试,因为这对我来说似乎是一个功能问题.一切似乎都很好,但我无法计算隐含的卷,因为我需要从内部调用同一个类的方法.这是我到目前为止:

module Module1
open System

type Black76 (CallPutFlag, Fwd, Strike, time, rf, vol, ?BlackPrice:float) =
    let d1 = (Math.Log(Fwd / Strike) + (vol * vol * 0.5) * time) / (vol * Math.Sqrt(time))
    let d2 = d1 - vol * Math.Sqrt(time)
    let n = new MathNet.Numerics.Distributions.Normal()
    member x.valuation =
        match CallPutFlag with
        | "c" | "C" | "Call" | "call"  -> Math.Exp(-rf * time) * (Fwd * n.InverseCumulativeDistribution(d1) - Strike * n.InverseCumulativeDistribution(d2))
        | "p" | "P" | "Put" | "put" …
Run Code Online (Sandbox Code Playgroud)

f#

0
推荐指数
1
解决办法
204
查看次数

标签 统计

c# ×2

asynchronous ×1

f# ×1

generics ×1

message-queue ×1

msmq ×1