首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在scriptcs csx脚本中定义扩展方法

如何在scriptcs csx脚本中定义扩展方法
EN

Stack Overflow用户
提问于 2013-06-05 19:48:26
回答 3查看 2.1K关注 0票数 20

我在玩ScriptCS (太棒了!)但我无法理解如何在.csx脚本文件中定义扩展方法。

举个例子:

代码语言:javascript
复制
using System.IO;

public static class Extensions
{
    public static string Remove(this string source, params string[] toRemove)
    {
        foreach(var r in toRemove)
        {
            source = source.Replace(r,"");
        }
        return source;
    }
}

string[] entries = 
    Directory
        .GetFiles(
            @"C:\Users\blah\blah",
            "*.mp4",
            SearchOption.AllDirectories)
    .Select( p => p.Remove("Users"))
    .ToArray();

foreach(var e in entries)
{
    Console.WriteLine(e);
}

这会产生错误:

error CS1109:扩展方法必须在顶级静态类中定义;扩展是一个嵌套类

我猜想,ScriptCS将csx封装在某个类中,这会导致扩展被嵌套,有什么方法可以避免这种情况呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-09 02:51:52

我感觉到你的痛苦。

实际上,这是Roslyn目前的一个限制,因为它将所有东西封装到一个类中,即使它是另一个类。

不过,我已经和罗斯林团队谈过了,他们很快就会支持扩展方法。

票数 21
EN

Stack Overflow用户

发布于 2018-10-29 06:15:28

好消息!现在在C#脚本文件(.csx)中支持C#

但是您必须在顶级上声明一个扩展方法。

代码语言:javascript
复制
static string MyToLowerExtension(this string str)
{
    return str.ToLower();
}

不在静态类中声明它:

代码语言:javascript
复制
// this will not work!
public static class MyExtensionsClass
{
    static string MyToLowerExtension(this string str)
    {
        return str.ToLower();
    }
}
票数 13
EN

Stack Overflow用户

发布于 2013-06-05 19:54:43

不幸的是,因为动态编译某些东西需要一个类,所以scriptcs被设计成获取重要的的原始代码,并将其包装在一个类中。为了满足您的需要,您需要修改scriptcs的一个版本,-or考虑对项目作出贡献

然而,我也爱 scriptcs,认为这是今天最棒的项目之一!

在使用scriptcs的时候,我也很早就试过了,当它不起作用时,我的心也碎了。如果我有更多的带宽,我会自己贡献这个额外的。

AFAIK这并不是对罗斯林的限制。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16948562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档