小编Bri*_*ian的帖子

.Net扩展方法与实用类

最近大约20个问题重复; 有人请链接他们.

对于简单的场景,何时应该使用其中一个?有什么优点和缺点?

使用扩展方法有哪些建议?

编辑:

让我举个例子.假设我有一个表示为字符串的Web相对路径.现在我想编写一个方法,1)检查路径是否以'/ en /或'/ fr /'2开头,如果它没有,则将该值从另一个字符串前置.

例如扩展方法

public static string ToLocaleRelativePath(this string s, string contextPath)
        {
//1. Check if string begins with a locale
//2. If it does not prepend the value extracted from the context path
}
Run Code Online (Sandbox Code Playgroud)

这样的操作是否适用于exteniosn方法,还是应该是实用工具?

谢谢

.net c# extension-methods

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

通用类型的F#问题

我正在尝试将一些C#代码转换为F#并遇到了一些小问题.这是我已经使用的F#代码:

open System
open System.Collections
open System.Collections.Generic

type Chromosome<'GeneType>() =
    let mutable cost = 0
    let mutable (genes : 'GeneType[]) = Array.zeroCreate<'GeneType> 0
    let mutable (geneticAlgorithm : GeneticAlgorithm<'GeneType>) = new GeneticAlgorithm<'GeneType>()

    /// The genetic algorithm that this chromosome belongs to.
    member this.GA
        with get() = geneticAlgorithm
        and set(value) = geneticAlgorithm <- value

    /// The genes for this chromosome.
    member this.Genes
        with get() = genes
        and set(value) = genes <- value

    /// The cost for this chromosome.
    member this.Cost
        with get() …
Run Code Online (Sandbox Code Playgroud)

generics f# types annotations c#-to-f#

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

如何在f#中将char转换为unicode值

我在javascript中制作了一个简单的ceasar密码,我需要在f#中重新制作它.我在javascript中使用charCodeAt()方法将字符串中的单个字符转换为它们的unicode值.有没有人知道如何在F#中执行此操作或者是否有类似于charCodeAt的命令?我已经找了几个小时,而且我已经没时间了.

谢谢

.net unicode f# char

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

如果函数在无限递归期间超出堆栈空间会发生什么?

有一个函数可以无限地递归调用自身.

这个函数也有一些参数.

对于每个函数调用,参数和返回地址都被压入堆栈.

对于每个进程,都有固定大小的堆栈空间,不能像堆一样动态增长.我猜每个线程也有自己的堆栈.

现在,如果一个函数被无限地递归调用并且进程耗尽堆栈空间,会发生什么?

程序会崩溃吗?OS会处理这种情况吗?有4GB的地址空间,为什么操作系统无法做些什么来增加堆栈大小.

language-agnostic recursion operating-system

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

不可变对象的约定

当您设计不可变类时,您更喜欢:

Layer.ColorCorrect ( layer )
Run Code Online (Sandbox Code Playgroud)

要么

layer.ColorCorrect ( )
Run Code Online (Sandbox Code Playgroud)

对我来说#1看起来更直观,而不是#2,看起来它修改了被引用的对象,因为它是一个实例方法,它也可以改变内部,对吧?

.net naming-conventions immutability

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

在F#中的结构列表?

我对F#很新,我正在尝试创建一个存储多边形的结构,它必须包含一个坐标列表:

type Polygon =
    struct
        val Coords : list
        new(list_of_Coords) = { Coords = list_of_Coords }
    end
Run Code Online (Sandbox Code Playgroud)

但Visual Studio说"类型'Microsoft.FSharp.Collections.list <_>'需要1个类型的参数但是给出0"

我想不是因为我不打算初始化结构中的列表 - 只是声明它.

f# struct list data-structures

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

这个F#代码出了什么问题?

我想使用一个有区别的联合来表示文件和目录.然后给定一个目录我想列出其中的所有文件(递归).

但在线 List.iter makeFileList

我明白了:

类型不匹配.期待FileOrDir - >单元,但给出了FileOrDir - >字符串列表.类型'unit'与'string list'类型不匹配

type FileOrDir = 
| File of string
| Directory of string * FileOrDir list

let example = Directory("Directory1",[File("file1.txt"); File("file2.txt"); Directory("EmptyDir",[])])

let rec makeFileList fad =
    [     
    match fad with 
    | File(name) -> yield name
    | Directory(name,listOfFiles) 
        ->  listOfFiles |> List.iter  makeFileList                          
    ]            
Run Code Online (Sandbox Code Playgroud)

我会很感激解释和解决方案.

f#

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

将指针C#类型转换为F#?

我只是编程的初学者,我希望将一些代码从C#转换为F#,

我已经使用了这段代码:

float[] v1=new float[10]
Run Code Online (Sandbox Code Playgroud)

我需要使用这个指针传递给函数:

ComputeBuffer<float> bufV1 = 
  new ComputeBuffer<float>(Context, ComputeMemoryFlags.ReadWrite |
         ComputeMemoryFlags.UseHostPointer, v1);
Run Code Online (Sandbox Code Playgroud)

如果我在F#中创建一个数组,如下所示:

let v1 = [| 1.0..10.0 |]
Run Code Online (Sandbox Code Playgroud)

现在调用这样的动作:

let bufV1 = new ComputeBuffer<float>(Context, 
    ComputeMemoryFlags.ReadWrite ||| 
        ComputeMemoryFlags.UseHostPointer, v1)
Run Code Online (Sandbox Code Playgroud)

这是一个错误?我如何传递指针?

f#

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

如何使我的功能通用

    let csvList startDelim endDelim lst memF = 
        let listIter (listStr: string) item = 
            if listStr.Length > 0 then 
                listStr + "," + (memF item)
            else 
                memF item                
        startDelim + (List.fold listIter "" lst) + endDelim

    let listIntoJsonArray = csvList "[" "]"
    let listIntoJsonObject = csvList "{" "}"

    let intConverter (item:int) : string =
        item.ToString()

    let objectConverter (item:SomeObject) : string =
        item.value.ToString()

    let objects = [{vaue: 12.3}; {vaule: 33.2}]
    let ints = [1;2;4]

    let o = listIntoJsonObject objects objectConverter
    let i …
Run Code Online (Sandbox Code Playgroud)

generics f# value-restriction

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

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

跳过模型类的字段

最近,在阅读了很多关于互联网的教程之后,我注意到有些开发人员会跳过在他们的模型类中编写字段而只是使用属性,如下所示:

public class MyClass
{
    public string MyProperty { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

除了编写更少的代码之外,这样做的好处究竟是什么?虽然我确实知道setter是私有的,但是当你没有指定私有字段时,是不是存在某种安全问题?换句话说:这里最好的做法是什么?编写没有字段和相关属性的模型类,或者只是在没有字段的情况下使用这些公共属性?

提前致谢,

c# automatic-properties

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

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

以递归方式合并F#中的两个列表

我期待写一个递归函数来合并到F#中的整数列表

我从这开始,但不知道接下来该做什么.

let rec merge xs ys =
    match xs with
    | [] -> ys
    | 

let li = [1;3;5;7;]
let ll = [2;4;5;8;]
Run Code Online (Sandbox Code Playgroud)

recursion f#

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