2016-10-03 304 views
2

我宣布我的项目中的所有类和命名空间之外以下枚举:如何覆盖C#中枚举的ToString()?

public enum ServerType { Database, Web } // there are more but omitted for brevity

我想要的东西,如覆盖ToString()方法:

public override string ToString(ServerType ServerType) 
{ 
    switch (ServerType) 
    { 
     case ServerType.Database: 
      return "Database server"; 
     case ServerType.Web: 
      return "Web server"; 
    } 
    // other ones, just use the base method 
    return ServerType.ToString(); 
} 

不过,我得到一个错误no suitable method found to override

使用我自己的方法转换为字符串时,是否可以重写枚举?

+0

使您的方法扩展 - 公共静态字符串ToMyString(此ServerType ServerType)'。然后使用它'_serverTypevariable.ToMyString();' – Fabio

+0

https://social.msdn.microsoft.com/Forums/vstudio/en-US/54b4e56e-f062-4b8b-aac6-30e8b04e8720/overriding-tostring-method-for- enumerations-in-c?forum = csharpgeneral – MethodMan

+1

已经在这里回答了http://stackoverflow.com/questions/479410/enum-tostring-with-user-friendly-strings – hjgraca

回答

-1

您可以定义一个静态类,然后使用它。 当您创建此静态类并引用您的项目时,可以在所有字符串变量中看到扩展的ToString()方法。这是扩展变量的一种简单方法。您可以使用它作为其他选项;)

public static class Extenders 
    { 
     public static string ToString(this string text, ServerType ServerType) 
     { 
      switch (ServerType) 
      { 
       case ServerType.Database: 
        return "Database server"; 
       case ServerType.Web: 
        return "Web server"; 
      } 
      // other ones, just use the base method 
      return ServerType.ToString(); 
     } 
    } 

使用它像下面;

"Merhaba".ToString(ServerType.Database);