Procedural vs. orientat pe obiecte
COBOL este procedural cu diviziuni de date plate, flux de control la nivel de paragraf și stare implicită. C# este orientat pe obiecte cu clase, namespace-uri și variabile cu domeniu de vizibilitate. Conversia naivă produce o singură clasă plină de metode și câmpuri statice care este mai greu de întreținut decât COBOL-ul original.
Reproiectarea stratului de acces la date
Programele COBOL folosim EXEC SQL pentru DB2, VSAM pentru fișiere indexate și I/O de fișiere plate cu lățime fixă. C# necesită ADO.NET, Entity Framework sau Dapper. Stratul de acces la date este adesea cea mai complexă parte a unei migrări COBOL la C#.
Construcțiile COBOL necesită mapare semantică
Intervalele PERFORM, EVALUATE/WHEN, MOVE CORRESPONDING, condițiile de nivel 88 și modelele INSPECT nu au echivalent direct în C#. Conversia corectă necesită înțelegerea semanticii COBOL și generarea de modele C# adecvate, nu substituție text linie cu linie.