Some optimizations to the C# generated code.


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665572 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_csharp_generator.cc b/compiler/cpp/src/generate/t_csharp_generator.cc
index 45370a4..f997630 100644
--- a/compiler/cpp/src/generate/t_csharp_generator.cc
+++ b/compiler/cpp/src/generate/t_csharp_generator.cc
@@ -453,35 +453,36 @@
   indent(out) <<
     "TStruct struc = new TStruct(\"" << name << "\");" << endl;
   indent(out) <<
-    "TField field = new TField();" << endl;
-  indent(out) <<
     "oprot.WriteStructBegin(struc);" << endl;
 
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    bool null_allowed = type_can_be_null((*f_iter)->get_type());
-    if (null_allowed) {
+  if (fields.size() > 0) {
+    indent(out) << "TField field = new TField();" << endl;
+    for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
+      bool null_allowed = type_can_be_null((*f_iter)->get_type());
+      if (null_allowed) {
+        indent(out) <<
+          "if (this." << (*f_iter)->get_name() << " != null) {" << endl;
+        indent_up();
+      }
+
       indent(out) <<
-        "if (this." << (*f_iter)->get_name() << " != null) {" << endl;
-      indent_up();
-    }
+        "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
+      indent(out) <<
+        "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
+      indent(out) <<
+        "field.ID = " << (*f_iter)->get_key() << ";" << endl;
+      indent(out) <<
+        "oprot.WriteFieldBegin(field);" << endl;
 
-    indent(out) <<
-      "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
-    indent(out) <<
-      "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
-    indent(out) <<
-      "field.ID = " << (*f_iter)->get_key() << ";" << endl;
-    indent(out) <<
-      "oprot.WriteFieldBegin(field);" << endl;
+      generate_serialize_field(out, *f_iter, "this.");
 
-    generate_serialize_field(out, *f_iter, "this.");
+      indent(out) <<
+        "oprot.WriteFieldEnd();" << endl;
 
-    indent(out) <<
-      "oprot.WriteFieldEnd();" << endl;
-
-    if (null_allowed) {
-      indent_down();
-      indent(out) << "}" << endl;
+      if (null_allowed) {
+        indent_down();
+        indent(out) << "}" << endl;
+      }
     }
   }
 
@@ -508,53 +509,54 @@
   indent(out) <<
     "TStruct struc = new TStruct(\"" << name << "\");" << endl;
   indent(out) <<
-    "TField field = new TField();" << endl;
-  indent(out) <<
     "oprot.WriteStructBegin(struc);" << endl;
 
-  bool first = true;
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (first) {
-      first = false;
-      out <<
-        endl << indent() << "if ";
-    } else {
-      out <<
-        " else if ";
-    }
+  if (fields.size() > 0) {
+    indent(out) << "TField field = new TField();" << endl;
+    bool first = true;
+    for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
+      if (first) {
+        first = false;
+        out <<
+          endl << indent() << "if ";
+      } else {
+        out <<
+          " else if ";
+      }
 
-    out <<
-      "(this.__isset." << (*f_iter)->get_name() << ") {" << endl;
-    indent_up();
-
-    bool null_allowed = type_can_be_null((*f_iter)->get_type());
-    if (null_allowed) {
-      indent(out) <<
-        "if (this." << (*f_iter)->get_name() << " != null) {" << endl;
+      out <<
+        "(this.__isset." << (*f_iter)->get_name() << ") {" << endl;
       indent_up();
-    }
 
-    indent(out) <<
-      "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
-    indent(out) <<
-      "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
-    indent(out) <<
-      "field.ID = " << (*f_iter)->get_key() << ";" << endl;
-    indent(out) <<
-      "oprot.WriteFieldBegin(field);" << endl;
+      bool null_allowed = type_can_be_null((*f_iter)->get_type());
+      if (null_allowed) {
+        indent(out) <<
+          "if (this." << (*f_iter)->get_name() << " != null) {" << endl;
+        indent_up();
+      }
 
-    generate_serialize_field(out, *f_iter, "this.");
+      indent(out) <<
+        "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
+      indent(out) <<
+        "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
+      indent(out) <<
+        "field.ID = " << (*f_iter)->get_key() << ";" << endl;
+      indent(out) <<
+        "oprot.WriteFieldBegin(field);" << endl;
 
-    indent(out) <<
-      "oprot.WriteFieldEnd();" << endl;
+      generate_serialize_field(out, *f_iter, "this.");
 
-    if (null_allowed) {
+      indent(out) <<
+        "oprot.WriteFieldEnd();" << endl;
+
+      if (null_allowed) {
+        indent_down();
+        indent(out) << "}" << endl;
+      }
+
       indent_down();
-      indent(out) << "}" << endl;
+      indent(out) << "}";
     }
-
-    indent_down();
-    indent(out) << "}";
   }
 
   out <<