c#向列表添加自定义方法

c#向列表添加自定义方法,c#,list,extension-methods,C#,List,Extension Methods,我想添加一个方法来扩展我的列表行为,但我遇到了问题。我希望在我正在处理的类中有“extension”方法。我怎么做 我想做: class MyClass { public void DoSomething() { List<string> myList = new List<string>() myList.Add("First Value"); myList.AddMoreValues(); //or my

我想添加一个方法来扩展我的列表行为,但我遇到了问题。我希望在我正在处理的类中有“extension”方法。我怎么做

我想做:

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");
        ...
    }
}
class-MyClass
{
公共无效剂量测定法()
{
列表myList=新列表()
myList.Add(“第一个值”);
myList.AddMoreValues();//或myList+=AddMoreValues()??
}        
私有void AddMoreValues(此列表)
{
列表。添加(“1”);
列表。添加(“2”);
...
}
}
上面的代码给出了错误:

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


您应该在单独的静态类中定义扩展方法

class-MyClass
{
公共无效剂量测定法()
{
列表myList=新列表()
myList.Add(“第一个值”);
myList.AddMoreValues();
}        
}
公共静态类扩展方法
公共静态无效AddMoreValues(此列表)
{
列表。添加(“1”);
列表。添加(“2”);
...
}
}

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

private static void AddMoreValues(this List<string> theList)
根据C规范第10.6.9节,扩展方法需要处于
静态
类:

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


扩展方法总是有
static
关键字,也在
static
类内,并在参数中使用
this
,如
(此列表)
。它必须在
static
类内。是这样吗?@Rahul是这样,根据规范:当方法的第一个参数包含this修饰符时,该方法被称为扩展方法。扩展方法只能在非泛型、非嵌套的静态类中声明。扩展方法的第一个参数不能有除此之外的修饰符,并且参数类型不能是指针类型。此外,如果您创建的扩展方法与您要扩展的类型具有相同的签名方法,则将永远不会调用扩展方法。@Rahul如果这些方法共享相同的签名,毫无疑问,您将得到一个含糊不清的方法调用生成错误。@user1208908啊,好吧,派生类应该可以。
AddMoreValues
不应该是privateTx-我不希望所有列表都可以这样做-仅MyClass中的列表。但我明白了。
private static void AddMoreValues(this List<string> theList)
public static class ListExtensions
{
    public static void AddMoreValues(this List<string> theList)
    {
        theList.Add("1");
        theList.Add("2");
        ...
    }
}