String.Join
работает нормально, и строка именно такая, какой вы хотите ее видеть. (Вы можете проверить это, если хотите, написав код для печати строки по одному символу за раз, по одному символу в каждой строке.) Проблема в том, что когда отображает it, весь текст на иврите и двоеточия рассматривается как одна фраза, а поскольку иврит в основном пишется справа налево, это означает, что первое слово во фразе отображается справа.
В зависимости от того, чего вы хотите достичь, это может быть нормально (например, если вы передаем его в другую программу, которая ожидает данных, разделенных двоеточиями - в этом случае строка может выглядеть неправильно, но другая программа ее интерпретирует нормально). Но если вы хотите, чтобы он выглядел так, как вы ожидаете, вы должны заставить алгоритм отображения обрабатывать двоеточия как слева направо. Вы можете сделать это, изменив код на
string result = String.Join("\u200e:"), list.ToArray());
\u200e
- это маркер слева направо (LRM), в результате чего любая смежная пунктуация обрабатывается как слева направо. -right.
Обратной стороной этого является то, что любая другая программа, интерпретирующая данные, может не ожидать LRM и может быть этим сбита с толку.