当前位置:  开发笔记 > 编程语言 > 正文

C#中的F#扩展方法

如何解决《C#中的F#扩展方法》经验,为你挑选了3个好方法。

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

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



1> alex..:
[]
module Methods =   
    []   
    let Exists(opt : string option) =                
    match opt with
       | Some _ -> true                  
       | None -> false

只有通过将命名空间(使用using)添加到将使用它的文件中,才能在C#中使用此方法.

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

这是原始博客帖子的链接.

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

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) method.Invoke(null, new object[] {'a', 'z'});
            foreach (var c in rangeChar)
            {
                Console.WriteLine(c);
            }
        }
    }

现在,给我一个惊人的勋章!



2> Brian..:

尽管我的另一个答案是,我只是尝试使用F#CTP(在VS shell上)和C#Express从我家里的盒子(所有免费开发工具!),这样做:

F#

#light
namespace MyFSharp

// C# way
[]
module ExtensionMethods =
    []
    let Great(s : System.String) = "Great"

    // F# way
    type System.String with
        member this.Awesome() = "Awesome"
    let example = "foo".Awesome()        

C#

using System;
using MyFSharp;  // reference the F# dll
class Program
{
    static void Main(string[] args)
    {
        var s = "foo";
        //s.Awesome(); // no
        Console.WriteLine(s.Great());  // yes
    }
}

我不知道你能做到这一点; 俏皮.感谢@alex.



3> Brian..:

根据语言规范,第10.7节"类型扩展":

可选的扩展成员是静态成员的语法糖.可选扩展成员的使用精心调用具有编码名称的静态成员,其中对象作为第一个参数传递.此版本的F#中未指定名称编码,并且与C#扩展成员的C#编码不兼容

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有