gpt4 book ai didi

c# - C# 中的 F# 扩展方法

转载 作者:IT王子 更新时间:2023-10-29 04:04:29 25 4
gpt4 key购买 nike

如果您要在用 F# 编写的程序集中定义一些扩展方法、属性,然后在 C# 中使用该程序集,您会在 C# 中看到定义的扩展吗?

如果是这样,那就太酷了。

最佳答案

[<System.Runtime.CompilerServices.Extension>]
module Methods =
[<System.Runtime.CompilerServices.Extension>]
let Exists(opt : string option) =
match opt with
| Some _ -> true
| None -> false

此方法只能通过将命名空间(using using)添加到将要使用的文件中来在 C# 中使用。

if (p2.Description.Exists()) {   ...}

Here is a link to the original blogpost.

在评论“扩展静态方法”中回答问题:

namespace ExtensionFSharp 

module CollectionExtensions =

type System.Linq.Enumerable with
static member RangeChar(first:char, last:char) =
{first .. last}

在 F# 中,您可以这样调用它:

open System.Linq 
open ExtensionFSharp.CollectionExtensions

let rangeChar = Enumerable.RangeChar('a', 'z')
printfn "Contains %i items" rangeChar.CountItems

在 C# 中你可以这样调用它:

using System;
using System.Collections.Generic;
using ExtensionFSharp;

class Program
{
static void Main(string[] args)
{
var method = typeof (CollectionExtensions).GetMethod("Enumerable.RangeChar.2.static");


var rangeChar = (IEnumerable<char>) method.Invoke(null, new object[] {'a', 'z'});
foreach (var c in rangeChar)
{
Console.WriteLine(c);
}
}
}

现在,给我我该死的勋章!

关于c# - C# 中的 F# 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com