2010-08-15 5 views
5

Mógłbym napisać następujące, aby przekonwertować obiekt na liczbę całkowitą.Jaka jest różnica między Konwertuj i parsuj?

Convert.ToInt32(myObject); 

Ale mogę też pisać

Int.Parse(myObject.ToString()); 
  • Czy jest jakaś różnica?
  • Którego powinienem użyć?

Z góry dziękuję.

+0

możliwy duplikat [Jaka jest główna różnica między int.Parse() i Convert.ToInt32] (http://stackoverflow.com/questions/199470/whats-the-main-difference-between-int-parse-and -convert-toint32) – nawfal

Odpowiedz

4
  • Czy są jakieś różnice?

Tak, Int32.parse(myObject.ToString()); zajmuje obejście do napisu, który będzie działał, ale zwykle jest to niepotrzebne i może zawieść lub dać inny wynik.

  • Którego powinienem użyć?

Ogólnie Convert.ToInt32(myObject);

Ale to zależy od tego, jaki rodzaj danych, które chcesz przekonwertować.

Jeśli myObject = '1';, czy chcesz 1 lub 49?

Jeśli chcesz , chcesz 0 lub wyjątek?

itp

1

jak ta metoda Convert.ToInt32 źródło wygląda

public static int ToInt32(object value) { 
    return value == null? 0: ((IConvertible)value).ToInt32(null); 
} 

Dopóki obiektu wdrożyć IConvertible interfejsu należy wywołać tę metodę.

+0

Jeśli obiekt zaimplementował IConvertable czy jest coś, co powstrzymuje mnie po prostu używając (IConvertible) myObject, wycinając w ten sposób wywołanie funkcji. –

+0

Jeśli masz pewność, że nie ma wartości null, powinieneś wywołać tę metodę bezpośrednio, ale zwróć uwagę, że w tej formie może ona zostać opitowana przez kompilator, dzięki czemu metoda zostanie wbudowana. – jethro

1

Zgodnie z documentation, zależy to od obiektu i tego, czy implementuje interfejs IConvertible. Istnieje kilka powodów, dla których podejścia te różnią się. Warto zauważyć, że jeśli reprezentacja ciągów znaków nie reprezentuje odpowiadającej wartości całkowitej (np. "{Wartość = 123}") lub obiekt nie jest IConvertible. Wybrałbym użycie Convert.ToInt32(), ponieważ konwersja jest zdefiniowana przez typ i nie polega na niektórych obserwowanych właściwościach, które mogłyby ulec zmianie w przyszłości.

0

O ile wiem, Konwersja i analizować różnią się na wiele sposobów:

Aby przekonwertować sposobu oddania obiektu z jego pierwotnego typu do innego typu (jeśli to możliwe) .Jednak oba obiekty są jakoś równe ich własny kontekst, na przykład "32" jest 32-literową wersją (jako liczbą całkowitą). W niektórych językach, takich jak Visual Basic, ten rodzaj konwersji może się zdarzyć niejawnie.

Parsowanie oznacza akceptację danych wejściowych (zazwyczaj w postaci ciągu) i przetłumaczenie ich na obiekt, który może być zupełnie inną rzeczą. Weźmy jako przykład: Możemy przeanalizować "20 lipca 2010", który jest ciągiem do daty. Oznacza to, że musimy przetłumaczyć podany ciąg na obiekt daty, który ma 20 jako dzień, 7 jako miesiąc i rok 2010 jako rok. Jest oczywiste, że to zadanie nie jest proste i powinna istnieć logika do analizy ciągu.