2016-05-05 4 views
0

Ich habe eine enum in meiner C# -Klasse.C# Wie füge ich Schrägstrich in enum hinzu

public enum OutputFormat { 
     DOCX = 0, 
     PDF = 1, 
     @out/pdf = 2 
    } 

Wie zu addieren/pdf drin? Danke

+0

Sie können nicht, wie (zum Beispiel) Sie können einen Variablennamen beginnen mit Zahlen oder verwenden Sie "void" als Variablenname ... Es gibt einige Sprach-/Compiler-Einschränkungen –

+0

Sie können nicht warum möchten Sie? – Liam

+0

@ Othello.netdev Sie können Schlüsselwörter als Variablennamen verwenden, wenn Sie ihnen '@' voranstellen. –

Antwort

0

Obwohl es nicht möglich ist, für eine Enumeration eine „/“ enthalten, Sie könnten, wenn Sie Ihre eigene Enum.ConvertToString() Erweiterungsmethode implementieren Sie suchen speziell nach dem Format "out/pdf".

Die Enum Erweiterungsmethode Klasse:

using System; 

namespace TestConsole 
{ 
    public static class OutputFormatEnum 
    { 
     public enum OutputFormat 
     { 
      DOCX = 0, 
      PDF = 1, 
      outpdf = 2 //@out/pdf 
     } 

     public static String ConvertToString(this OutputFormat outputFormat) 
     { 
      return (outputFormat == OutputFormat.outpdf) ? "out/pdf" : Enum.GetName(outputFormat.GetType(), outputFormat); 
     } 

     public static OutputFormat ConverToEnum(this string enumValue) 
     { 
      OutputFormat outputFormat; 
      if (!Enum.TryParse(enumValue, true, out outputFormat)) 
      { 
       if (enumValue.Equals("out/pdf", StringComparison.InvariantCultureIgnoreCase)) 
        outputFormat = OutputFormat.outpdf; 
       else 
        throw new InvalidCastException($"'{enumValue}' is not a valid value for enum OutputFormat"); 
      } 

      return outputFormat; 
     } 
    } 
} 

Verbrauch:

using System; 

namespace TestConsole 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string outputFormat = "out/pdf"; 
      var outputFormatEnum = outputFormat.ConverToEnum(); 
      var outputFormatEnumValueString = outputFormatEnum.ConvertToString(); 

      Console.WriteLine($"outputFormat: {outputFormat} | outputFormatEnumValueString: {outputFormatEnumValueString}"); 

      Console.ReadLine(); 
     } 
    } 
} 

Ausgang:

Console Output

4

Enum Werte können nur ganzzahlige Typen sein (Byte, sbyte, kurz, ushort, int, uint, long oder ulong). Aufzählungsnamen können nur gültig sein .NET identifiers => nein / möglich.

+0

ok danke. Viele Leute fragen, warum Sie das wollen, anstatt die Frage zu beantworten –

0

Technisch, nein, können Sie nicht wegen /.

C# specification "1.10 Aufzählungen":

ein ENUM-Typ ist ein eindeutiger Werttyp mit einem Satz von benannten Konstanten.

Genaue Regeln für die konstante Benennung finden Sie in der Spezifikation "2.4.2 Identifiers".

Wenn Ihnen der genaue Name wichtiger ist als der Enum-Wert, sollten Sie stattdessen String-Konstanten verwenden und mögliche Fehler vermeiden, wenn ein anderer Entwickler diese Namen umschreibt, um unorthodoxe Zeichen zu entfernen (inkl. Hässlich aussehender @) Präfix).

Zum Beispiel sehen, wie MS wählte MediaTypeNames zu implementieren:

public static class MediaTypeNames 
{ 
    public static class Application 
    { 
     public const string Octet = "application/octet-stream"; 
     public const string Pdf = "application/pdf"; 
     public const string Rtf = "application/rtf"; 
     public const string Soap = "application/soap+xml"; 
     public const string Zip = "application/zip"; 
    } 
    //omitted rest.. 
} 
Verwandte Themen