diff --git a/src/idl_gen_csharp.cpp b/src/idl_gen_csharp.cpp index 9988523f32f..cfcbe92f652 100644 --- a/src/idl_gen_csharp.cpp +++ b/src/idl_gen_csharp.cpp @@ -620,12 +620,27 @@ class CSharpGenerator : public BaseGenerator { std::string GenKeyGetter(flatbuffers::StructDef &struct_def, flatbuffers::FieldDef *key_field) const { // Get the getter for the key of the struct. - return GenGetterForLookupByKey(struct_def, key_field, "builder.DataBuffer", - "builder.DataBuffer.Length - o1.Value") + - ".CompareTo(" + - GenGetterForLookupByKey(struct_def, key_field, "builder.DataBuffer", - "builder.DataBuffer.Length - o2.Value") + - ")"; + if (GenTypeGet(key_field->value.type) == "string") { + return "string.CompareOrdinal(" + + GenGetterForLookupByKey(struct_def, key_field, "builder.DataBuffer", + "builder.DataBuffer.Length - o1.Value") + + "," + + GenGetterForLookupByKey(struct_def, key_field, + "builder.DataBuffer", + "builder.DataBuffer.Length - o2.Value") + + ")"; + } + else + { + return GenGetterForLookupByKey(struct_def, key_field, + "builder.DataBuffer", + "builder.DataBuffer.Length - o1.Value") + + ".CompareTo(" + + GenGetterForLookupByKey(struct_def, key_field, + "builder.DataBuffer", + "builder.DataBuffer.Length - o2.Value") + + ")"; + } } // Get the value of a table verification function start @@ -1539,7 +1554,13 @@ class CSharpGenerator : public BaseGenerator { "(start + middle), bb);\n"; code += " obj_.__assign(tableOffset, bb);\n"; - code += " int comp = obj_." + name + ".CompareTo(key);\n"; + if (GenTypeGet(key_field->value.type) == "string") { + code += " int comp = string.CompareOrdinal(obj_." + name + ",key);\n"; + } + else + { + code += " int comp = obj_." + name + ".CompareTo(key);\n"; + } code += " if (comp > 0) {\n"; code += " span = middle;\n"; code += " } else if (comp < 0) {\n";