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 .


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;
}

10
int a = int.Parse(myString);

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


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.


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;
}


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);

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.


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 #


0
int i;

string result = Something;

i = Convert.ToInt32(result);

0

Możesz użyć albo

    int i = Convert.ToInt32(myString);

lub

    int i =int.Parse(myString);

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));
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.