c#将自定义方法添加到列表中

Cam*_*llo 3 c# extension-methods list

我想添加一个方法来扩展我的List行为,但是我遇到了麻烦.我想在我正在处理它的类中使用'扩展'方法.我该怎么做?

我想要做:

class MyClass
{
    public void DoSomething()
    {
        List<string> myList = new List<string>()
        myList.Add("First Value");
        myList.AddMoreValues(); //or myList += AddMoreValues()  ??
    }        

    private void AddMoreValues(this List<string> theList)
    {
        theList.Add("1");
        theList.Add("2");
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了错误:

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

mat*_*mmo 7

扩展方法必须是静态的,才能使用它们的方式.只需将static关键字添加到您的方法:

private static void AddMoreValues(this List<string> theList)
Run Code Online (Sandbox Code Playgroud)

但是最好把它放在一个单独的static类中并制作它public(以这种方式组织扩展方法更容易),例如:

public static class ListExtensions
{
    public static void AddMoreValues(this List<string> theList)
    {
        theList.Add("1");
        theList.Add("2");
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

static根据C#规范的第10.6.9节,扩展方法需要在类中:

当方法的第一个参数包含this修饰符时,该方法被称为扩展方法.扩展方法只能在非泛型的非嵌套静态类中声明.扩展方法的第一个参数除此之外不能有任何修饰符,参数类型不能是指针类型.