AVRO-3953: Prefixing enum member identifiers instead of throwing (#2783)

* AVRO-3953

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* Unit test added. Removed local check for symbol.

---------

Signed-off-by: Clemens Vasters <clemens@vasters.com>
diff --git a/lang/csharp/src/apache/main/CodeGen/CodeGen.cs b/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
index 7e79362..73b9585 100644
--- a/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
+++ b/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
@@ -474,8 +474,6 @@
         /// <exception cref="CodeGenException">
         /// Unable to cast schema into an enum
         /// or
-        /// Enum symbol " + symbol + " is a C# reserved keyword
-        /// or
         /// Namespace required for enum schema " + enumschema.Name.
         /// </exception>
         protected virtual void processEnum(Schema schema)
@@ -498,11 +496,6 @@
 
             foreach (string symbol in enumschema.Symbols)
             {
-                if (CodeGenUtil.Instance.ReservedKeywords.Contains(symbol))
-                {
-                    throw new CodeGenException("Enum symbol " + symbol + " is a C# reserved keyword");
-                }
-
                 CodeMemberField field = new CodeMemberField(typeof(int), symbol);
                 ctd.Members.Add(field);
             }
diff --git a/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs b/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
index f8eef4a..33c7f0c 100644
--- a/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
+++ b/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
@@ -109,6 +109,33 @@
                 Assert.That(hasPlanetEnumCode);
                 Assert.That(Regex.Matches(planetEnumCode, "public enum PlanetEnum").Count, Is.EqualTo(1));
             }
+
+            [Test]
+            public void EnumWithKeywordSymbolsShouldHavePrefixedSymbols()
+            {
+                AddSchema(@"{
+    ""type"": ""enum"",
+    ""symbols"": [
+        ""string"",
+        ""integer"",
+        ""float"",
+        ""boolean"",
+        ""list"",
+        ""dict"",
+        ""regex""
+    ],
+    ""name"": ""type"",
+    ""namespace"": ""com.example""
+}");
+                GenerateCode();
+                var types = GetTypes();
+                Assert.That(types.Count, Is.EqualTo(1));
+                bool hasTypeCode = types.TryGetValue("type", out string typeCode);
+                Assert.That(hasTypeCode);
+                Assert.That(Regex.Matches(typeCode, "public enum type").Count, Is.EqualTo(1));
+                Assert.That(Regex.Matches(typeCode, "@string,").Count, Is.EqualTo(1));
+                Assert.That(Regex.Matches(typeCode, "@float,").Count, Is.EqualTo(1));
+            }
         }
     }
 }