C# 如何使用FsCheck为可空类型生成null?

C# 如何使用FsCheck为可空类型生成null?,c#,fscheck,C#,Fscheck,我有一个似乎可以工作的生成器,但是当我检查生成的值时,它从不选择空值。一个将拾取空值的生成器如何写入。此代码从不为“结束”日期选择空值 publicstaticgennullabledatetimegen() { var list=新列表(); if(list.Any()==false) { var endDate=DateTime.Now.AddDays(5); var startDate=DateTime.Now.AddDays(-10); list.AddRange(可枚举的.Range(

我有一个似乎可以工作的生成器,但是当我检查生成的值时,它从不选择空值。一个将拾取空值的生成器如何写入。此代码从不为“结束”日期选择空值

publicstaticgennullabledatetimegen()
{
var list=新列表();
if(list.Any()==false)
{
var endDate=DateTime.Now.AddDays(5);
var startDate=DateTime.Now.AddDays(-10);
list.AddRange(可枚举的.Range(0,1+endDate.Subtract(startDate).Days)
.Select(offset=>startDate.AddDays(offset))
.Cast()
.ToList());
list.Add(空);
list.Insert(0,空);
}
从Gen.Choose中的i返回(0,list.Count-1)
选择列表[i];
}
公共静态任意TestTuple()
{
返回(来自NullableDateTimeGen()中的s,其中(x=>x!=null)
来自NullableDateTimeGen()中的e
来自NullableDateTimeGen()中的p,其中(x=>x!=null)

其中s问题与FsCheck无关,在本声明中:

from s in NullableDateTimeGen().Where(x => x != null)
            from e in NullableDateTimeGen()
            from p in NullableDateTimeGen().Where(x => x != null)
            where s <= e
            select new Tuple<DateRange, DateTime>(new DateRange(s.Value, e), p.Value))
如果
e
为null,则此比较永远不会为true,因为与null进行比较的任何内容都始终为false。因此,您也会过滤掉
e
的null值

要解决这个问题,只需用对您的场景有意义的东西来替换该条件,如

where e == null || s <= e

其中e==null | |到底是什么不拾取null值?NullableDateTimeGen还是TestTuple函数?@Evk:TestTuple
where s <= e
where e == null || s <= e