C# 为什么可以';我不能调用扩展方法吗?

C# 为什么可以';我不能调用扩展方法吗?,c#,C#,我有一门课: class Program { static void Main(string[] args) { } public static int SetFlag_Old(this int i, int flag, bool set = true) { return (set) ? i | flag : ((i & flag) != 0) ? (i - flag) : i; } } 当我把这段代码放到上面的ma

我有一门课:

class Program
{
    static void Main(string[] args)
    {

    }

    public static int SetFlag_Old(this int i, int flag, bool set = true)
    {
        return (set) ? i | flag : ((i & flag) != 0) ? (i - flag) : i;

    }
}
当我把这段代码放到上面的main方法中时,我没有选择调用扩展方法,我也不知道为什么

int i = 0;
i.

即使我创建一个非静态方法并插入代码,我似乎也不能调用扩展方法。我错过了一些非常简单的东西吗?

扩展方法必须在静态类中:

public static class IntExtensions 
{
    public static int SetFlag_Old(this int i, int flag, bool set = true)
    {
        return (set) ? i | flag : ((i & flag) != 0) ? (i - flag) : i;
    }
}

代码甚至无法编译。它将给出错误
扩展方法必须在非泛型静态类中定义。你还需要多少信息?我将为您重新编写:

扩展方法必须在非泛型静态类中定义


我要补充的是,您可以使您的
程序
静态
。考虑到它的“entry”方法(
Main
)是
静态的
,我不知道为什么他们没有在代码模板中直接将其设置为静态的。

扩展方法所在的类本身必须是静态的。向程序类添加静态修饰符。

扩展方法必须在非泛型且静态的类中定义。程序不是静态的


请参见未编译的

。修复编译错误还修复了您的问题“错误CS1106:扩展方法必须在非泛型静态类中定义”-感觉编译器试图告诉我一些事情。。。要是能更具体点就好了!嗨,马克,谢谢你的讽刺回应。事实上,我没有意识到它没有建立,因为我没有得到通常的错误标签。我打开了VisualStudio(新机器),我没有错误列表,所以我只看到黑白书写,看起来“OK”。虽然我真的在笑,但我还是很欣赏他们的回答。@Pete2k这本应该是开玩笑,而不是彻头彻尾的讽刺。但是:编译器消息窗格几乎总是第一个查找任何失败构建的地方(我可能错了,但我认为如果构建失败,它会自动显示错误窗格;哦,好的)。无论如何,没有冒犯的意思。即使你解决了所有的问题,它也可能不会在智能意义上出现。只需输入blindy您的整个方法名称,在输入开始括号后,intellisense将向您显示参数;简单地说,它必须在
静态
类中;将
程序
标记为
静态
将实现same@MarcGravell是的,但我认为最好是在它自己的课堂上。不过我已经更新了我的答案。