小编Daw*_*aws的帖子

如何为 System.Type 创建任意类型?

我正在尝试使用 FsCheck 初始化我的模型实体。这些模型位于 C# 中,通常通过实体框架的私有设置器进行初始化。例如(人为的):

public class Model
{
    public string One { get; private set; } 
    public int Two { get; private set; } 
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个 FsCheck 生成器,它自动使用每个属性的注册生成器来生成模型。像这样的东西:

let modelGenerator = 
    gen {
        let incident = new Model()
        typeof<Model>.GetProperties()
            |> Array.filter (fun p -> p.CanWrite)
            |> Array.iter (fun p -> 
                let! newVal = Arb.generateType p.PropertyType // I wish I could do this
                p.SetValue(incident, newVal))

        return incident
    }
Run Code Online (Sandbox Code Playgroud)

这有两个问题:

  1. 不能在计算表达式let!之外使用gen
  2. Arb.generateType不存在,而且我找不到一种方法来做到这一点

是否可以创建一个生成器来自动在我的模型上设置私有字段?

testing f# fscheck

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

如何在命令行参数中忽略转义字符?

考虑一个简单的F#控制台应用程序,它回应传递给它的命令行参数,每行一个命令:

[<EntryPoint>]
let main argv = 
    argv |> Array.iter (printfn "%s")
    0
Run Code Online (Sandbox Code Playgroud)

如果我将此程序传递给带有斜杠的目录路径,它会将斜杠视为转义字符,从而产生意外结果:

> app.exe "c:\some path\" "c:\another path"
c:\some path" c:\another
path
Run Code Online (Sandbox Code Playgroud)

如何在不将斜杠解释为转义字符的情况下检索命令行参数?

f# command-line

2
推荐指数
1
解决办法
145
查看次数

标签 统计

f# ×2

command-line ×1

fscheck ×1

testing ×1