Możesz użyć tej linijki którą zakomentowałeś, ale policzy co innego. Sprawdziłem Twój kod dla liczby 1703, dostałem wartości 11 dla niezakomentowanej oraz 203 dla zakomentowanej linijki.
Wynika to z tego że że odczytując datatype String jako tablice, tak jak w Twoim kodzie, nie odczytujemy tego jako String, tylko jako char, a konwertując char do int, kompilator nie odczytuje wartości znaku 1 jako 1, tylko sprawdza jego wartość w tabeli ASCII, a tam 1 ma wartość 49. Dla 7 jest to 55, dla 0 - 48, dla 3 - 51, co daje 203. I tak jest z każdym charem który zamieniamy na int, dlatego używamy ToString() aby skonwertować char na String, a dopiero później na int, otrzymując taką wartość która dla nas jako człowieka jest poprawna. Dzięki temu ze char jest konwertowany w odwołaniu do ASCII, można konwertować do inta litery i inne znaki i przeprowadzać na nich operacje matematyczne. Podobnie w drugą stronę, konwertując int 49 do char otrzymamy 1, bo wartość 49 w ASCII odpowiada znakowi 1.
Napisałem kod który pokazuje dokładnie datatype i jego wartość po konwersji do inta przed i po ToString(), a na dole wstawiłem obrazek z ASCII.
using System;
class Program
{
static void Main()
{
int suma = 0, sumaASCII = 0;
string liczbaX;
Console.WriteLine("Podaj liczbę całkowitą: ");
liczbaX = Console.ReadLine();
Console.WriteLine("LiczbaX: "+ liczbaX);
for (int i = 0; i < liczbaX.Length; i++){
Console.WriteLine("\nZnak na miejscu [" + i + "]: " + liczbaX[i] + ", Datatype znaku przed '.ToString()' to " + liczbaX[i].GetType().FullName +", a jego wartość jako int to " + Convert.ToInt16(liczbaX[i]));
Console.WriteLine("Znak na miejscu [" + i + "]: " + liczbaX[i] + ", Datatype znaku po '.ToString()' to " + liczbaX[i].ToString().GetType().FullName +", a jego wartość jako int to " + Convert.ToInt16(liczbaX[i].ToString()));
suma += Convert.ToInt16(liczbaX[i].ToString());
sumaASCII += Convert.ToInt16(liczbaX[i]);
}
Console.WriteLine("\nSuma po konwersji Chara: "+ sumaASCII);
Console.WriteLine("Suma po konwersji Stringa: "+ suma);
}
}