OriginalGriff
Единственное существенное различие, которое я вижу, - это static
на оригинальной и не имеющей эквивалент в C#.
В C и C++ статическая локальная переменная привязана к функции, но ее значение не основано на стеке - оно сохраняется во всех исполнениях метода, поэтому, если вы измените его на этот раз, оно будет иметь новое значение при следующем вызове функции. В C# нет ничего подобного, поэтому ваша переменная должна быть объявлена на уровне класса, С или без static
ключевое слово в зависимости от объявления метода.
Но в целом преобразование кода C или C++ непосредственно в C# - плохая идея: вы не получите "хороший C#". Переписать его для использования функций C# и классов .NET обычно гораздо лучше.