Procedural vs. Object-Oriented
COBOL is procedural with flat data divisions, paragraph-level control flow, and implicit state. C# is object-oriented with classes, namespaces, and scoped variables. Naive conversion produces a single class stuffed with static methods and fields that is harder to maintain than the original COBOL.
Data Access Layer Redesign
COBOL programs use EXEC SQL for DB2, VSAM for indexed files, and fixed-width flat file I/O. C# needs ADO.NET, Entity Framework, or Dapper. The data access layer is often the most complex part of a COBOL to C# migration.
COBOL Constructs Need Semantic Mapping
PERFORM ranges, EVALUATE/WHEN, MOVE CORRESPONDING, 88-level conditions, and INSPECT patterns have no direct C# equivalent. Correct conversion requires understanding COBOL semantics and generating proper C# patterns, not line-by-line text substitution.