Jak przekonwertować ciąg na liczbę całkowitą w C #

Odpowiedzi:

134

Jeśli masz pewność, że przeanalizuje poprawnie, użyj

int.Parse(string)

Jeśli nie, użyj

int i;
bool success = int.TryParse(string, out i);

Uwaga! W poniższym przypadku ibędzie równe 0, a nie 10 po TryParse.

int i = 10;
bool failure = int.TryParse("asdf", out i);

Dzieje się tak, ponieważ TryParseużywa parametru out , a nie parametru ref .

Brandon
źródło
2
@sslaitha, dzięki. Jeśli odpowiedź była wystarczająca, pamiętaj, aby oznaczyć ją jako odpowiedź.
Brandon
3
Zwróć uwagę, że jeśli masz int i = 10; i użyj int.TryParse ("asdf", out i); że będę zawierał 0, a nie 10 !!! Dzieje się tak, ponieważ TryParse używa zmiennej out, a nie ref.
CaffGeek
2
„Ostrożność” dotyczy trzeciego przykładu - nie drugiego. Zastanawiałem się trochę, ponieważ spodziewałem się, że „to” będzie odnosić się do przykładu powyżej, a nie poniżej.
peter_mcc,
22
int myInt = System.Convert.ToInt32(myString);

Jak wspomniało kilku innych, możesz również użyć int.Parse()i int.TryParse().

Jeśli masz pewność, że stringzawsze będzie int:

int myInt = int.Parse(myString);

Jeśli chcesz sprawdzić, czy stringto naprawdę intpierwsza:

int myInt;
bool isValid = int.TryParse(myString, out myInt); // the out keyword allows the method to essentially "return" a second value
if (isValid)
{
    int plusOne = myInt + 1;
}
devuxer
źródło
10
int a = int.Parse(myString);

lub jeszcze lepiej, spójrz na int.TryParse(string)

Neil N.
źródło
6
string varString = "15";
int i = int.Parse(varString);

lub

int varI;
string varString = "15";
int.TryParse(varString, out varI);

int.TryParsejest bezpieczniejsze, ponieważ jeśli wstawisz coś innego varString(na przykład "fsfdsfs"), dostaniesz wyjątek. Używając int.TryParsewhen string nie można przekonwertować na int, zwróci 0.

MadBoy
źródło
5

Jeśli jesteś pewien, że masz „rzeczywistą” liczbę w swoim ciągu lub nie przeszkadza Ci żaden wyjątek, który może się pojawić, użyj tego.

string s="4";
int a=int.Parse(s);

Aby uzyskać większą kontrolę nad procesem, użyj

string s="maybe 4";
int a;
if (int.TryParse(s, out a)) {
    // it's int;
}
else {
    // it's no int, and there's no exception;
}
Daniel Mošmondor
źródło
5

Zrób coś takiego:

var result = Int32.Parse(str);
Tomas Vana
źródło
3
int i;
string whatever;

//Best since no exception raised
int.TryParse(whatever, out i);

//Better use try catch on this one
i = Convert.ToInt32(whatever);
madatanic
źródło
2

Testowane są tutaj 4 techniki.

Najszybszy okazał się następujący sposób:

y = 0;
for (int i = 0; i < s.Length; i++)
       y = y * 10 + (s[i] - '0');

„s” to ciąg znaków, który chcesz przekonwertować na liczbę całkowitą. Ten kod zakłada, że ​​podczas konwersji nie będzie żadnych wyjątków. Więc jeśli wiesz, że twoje dane łańcuchowe zawsze będą miały wartość typu int, powyższy kod jest najlepszym sposobem na osiągnięcie czystej prędkości.

Na końcu „y” będzie miało wartość int.


źródło
2
bool result = Int32.TryParse(someString, out someNumeric)

Ta metoda spróbuje przekonwertować someStringna someNumerici zwróci resultzależność, jeśli konwersja powiedzie się, truejeśli konwersja zakończy się powodzeniem i falsejeśli konwersja się nie powiedzie. Zwróć uwagę, że ta metoda nie zgłosi wyjątku, jeśli konwersja nie powiedzie się, tak jak w przypadku Int32.Parsemetody, a zamiast tego zwraca zero dla someNumeric.

Aby uzyskać więcej informacji, możesz przeczytać tutaj:

https://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
&
Jak przekonwertować ciąg na liczba całkowita w C #

jet_choong
źródło
0
int i;

string result = Something;

i = Convert.ToInt32(result);
deepu
źródło
0

Możesz użyć albo

    int i = Convert.ToInt32(myString);

lub

    int i =int.Parse(myString);
Impas
źródło
0
class MyMath
{
    public dynamic Sum(dynamic x, dynamic y)
    {
        return (x+y);
    }
}

class Demo
{
    static void Main(string[] args)
    {
        MyMath d = new MyMath();
        Console.WriteLine(d.Sum(23.2, 32.2));
    }
}
Abdo
źródło