最近大约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方法,还是应该是实用工具?
谢谢
我正在尝试将一些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) 我在javascript中制作了一个简单的ceasar密码,我需要在f#中重新制作它.我在javascript中使用charCodeAt()方法将字符串中的单个字符转换为它们的unicode值.有没有人知道如何在F#中执行此操作或者是否有类似于charCodeAt的命令?我已经找了几个小时,而且我已经没时间了.
谢谢
有一个函数可以无限地递归调用自身.
这个函数也有一些参数.
对于每个函数调用,参数和返回地址都被压入堆栈.
对于每个进程,都有固定大小的堆栈空间,不能像堆一样动态增长.我猜每个线程也有自己的堆栈.
现在,如果一个函数被无限地递归调用并且进程耗尽堆栈空间,会发生什么?
程序会崩溃吗?OS会处理这种情况吗?有4GB的地址空间,为什么操作系统无法做些什么来增加堆栈大小.
当您设计不可变类时,您更喜欢:
Layer.ColorCorrect ( layer )
Run Code Online (Sandbox Code Playgroud)
要么
layer.ColorCorrect ( )
Run Code Online (Sandbox Code Playgroud)
对我来说#1看起来更直观,而不是#2,看起来它修改了被引用的对象,因为它是一个实例方法,它也可以改变内部,对吧?
我对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"
我想不是因为我不打算初始化结构中的列表 - 只是声明它.
我想使用一个有区别的联合来表示文件和目录.然后给定一个目录我想列出其中的所有文件(递归).
但在线 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)
我会很感激解释和解决方案.
我只是编程的初学者,我希望将一些代码从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)
这是一个错误?我如何传递指针?
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) 最近,在阅读了很多关于互联网的教程之后,我注意到有些开发人员会跳过在他们的模型类中编写字段而只是使用属性,如下所示:
public class MyClass
{
public string MyProperty { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
除了编写更少的代码之外,这样做的好处究竟是什么?虽然我确实知道setter是私有的,但是当你没有指定私有字段时,是不是存在某种安全问题?换句话说:这里最好的做法是什么?编写没有字段和相关属性的模型类,或者只是在没有字段的情况下使用这些公共属性?
提前致谢,
博
F#支持包括Visual Studio的Express版本吗?
我期待写一个递归函数来合并到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)