如何覆盖ToString()并实现泛型?

B S*_*ven 1 .net c# generics extension-methods overriding

我有代码,我想进行以下更改:

  1. 如何覆盖ToString()?它说:静态成员... ToString(System.Collections.Generic.List)'不能标记为覆盖,虚拟或抽象.

  2. 我如何使它通用?

    public static override string ToString(this List<int> list) {
        string output = "";
        list.ForEach(item => output += item.ToString() + "," );
        return output;
    }
    
    Run Code Online (Sandbox Code Playgroud)

谢谢!

Mic*_*uso 5

您不能使用扩展方法来覆盖现有方法。

从规范http://msdn.microsoft.com/en-us/library/bb383977.aspx

“您可以使用扩展方法来扩展类或接口,但不能覆盖它们。与接口或类方法具有相同名称和签名的扩展方法将永远不会被调用。在编译时,扩展方法的优先级始终低于类型本身中定义的实例方法。”


Ant*_*ram 5

如果要覆盖ToString(),则需要继承List<T>而不是尝试扩展它.您已经看到,您无法将静态扩展方法标记为覆盖,并且如果扩展方法可用,则重载决策将始终用于成员方法.你的选择是

  • 继承和覆盖
  • 将扩展方法的名称更改为其他名称 ToSpecialString()
  • 使用类名直接调用该方法 MyExtensions.ToString(myList);