c#向列表添加自定义方法
我想添加一个方法来扩展我的列表行为,但我遇到了问题。我希望在我正在处理的类中有“extension”方法。我怎么做 我想做: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
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");
...
}
}