2010-10-18 29 views
14

thể trùng lặp:
Whats the main difference between int.Parse() and Convert.ToInt32sử dụng Better int.Parse hoặc Convert.ToInt32

Hi guys, tôi muốn biết những gì đang PRO và nhược điểm của việc sử dụng Convert.ToInt32 VS int.Parse. Cảm ơn bạn đã hỗ trợ!

Dưới đây là một ví dụ về cú pháp Tôi đang sử dụng

  int myPageSize = Convert.ToInt32(uxPageSizeUsersSelector.SelectedValue); 

      int myPageSize = int.Parse(uxPageSizeUsersSelector.SelectedValue); 

Tôi cũng phát hiện ra bài viết này, có lẽ có thể giúp cho một cuộc thảo luận http://dotnetperls.com/int-parse http://aspdotnethacker.blogspot.com/2010/04/difference-between-int32parsestring.html http://aspdotnethacker.blogspot.com/p/visual-studio-performance-wizard.html

+0

Cả hai phương pháp đều nhanh hơn mã phân tích cú pháp int tùy chỉnh, vì trong phân tích cú pháp phải xử lý dấu cách, - hy vọng, dòng mới, v.v. –

Trả lời

25

Convert.ToInt32 là để đối phó với bất kỳ đối tượng mà thực hiện IConvertible và có thể được chuyển đổi thành một int. Ngoài ra, Convert.ToInt32 trả lại 0 cho null, trong khi int.Parse ném một số ArgumentNullException.

int.Parse là đặc biệt để xử lý chuỗi.

Khi nó quay ra, việc thực hiện string loại IConvertible chỉ sử dụng int.Parse trong phương pháp ToInt32 của nó.

Vì vậy, hiệu quả, nếu bạn gọi Convert.ToIn32 trên string, bạn gọi int.Parse, chỉ với chi phí hơn một chút (thêm một vài cuộc gọi phương pháp).

Điều này đúng cho bất kỳ chuyển đổi nào từ string thành một số kiểu nguyên thủy (tất cả đều gọi là Parse). Vì vậy, nếu bạn đang xử lý các đối tượng được nhập mạnh mẽ string (ví dụ: bạn đang phân tích cú pháp tệp văn bản), tôi khuyên bạn nên Parse, đơn giản vì nó trực tiếp hơn.

Chuyển đổi các đối tượng tùy ý (ví dụ như một số thư viện bên ngoài được trả về) là trường hợp tôi muốn sử dụng lớp Convert.

2

Giao diện Convert là một mục đích tổng quát hơn một. Kết quả thực sự là như nhau.

Bên trong, nó chỉ gọi int.Parse:

public static int ToInt32(String value) { 
    if (value == null) 
     return 0; 
    return Int32.Parse(value, CultureInfo.CurrentCulture); 
} 

Trên code đang từ nguồn tài liệu tham khảo.

3

Tôi không thể trả lời dựa trên hiệu suất, nhưng phương pháp ưa thích của tôi luôn luôn là int.tryparse (bí ẩn, ra khỏi myint) vì điều đó mang lại một lỗi sạch mà bạn có thể kiểm tra trong luồng chương trình (chứ không phải thử/bắt) .

+0

Điều này thực sự phụ thuộc vào những gì bạn muốn làm. Nếu bạn thực sự cần phân tích cú pháp để thành công, hoặc bạn biết rằng nó là một biểu diễn hợp lệ của một số, nó hoàn toàn hợp lệ để sử dụng int.Parse. Bạn sẽ làm gì khi TryParse bị lỗi trong trường hợp này? Bạn sẽ chỉ ném một ngoại lệ khác. –

+1

Trong sử dụng của tôi, * một * ngoại lệ sẽ được ném, và đó sẽ là một ngoại lệ có ý nghĩa đối với ứng dụng của tôi - trong cách sử dụng của bạn, hai hoặc nhiều ngoại lệ sẽ được ném, một hoặc nhiều ném bởi int.Parse và bị bắt bởi bạn và cái bạn ném để thêm ngữ cảnh vào các lỗi được truyền lại. – Moo

17

Không có nhiều khác biệt. Đây là một trích dẫn tìm thấy trên msdn.

Về cơ bản, lớp chuyển đổi giúp bạn chuyển đổi giữa tất cả các loại cơ sở dễ dàng hơn.

Convert.ToInt32 (String, IFormatProvider) bên dưới gọi số Int32.Parse. Vì vậy, sự khác biệt duy nhất là rằng nếu một chuỗi rỗng được chuyển đến Chuyển đổi nó trả về 0, trong khi Int32.Parse ném một ArgumentNullException. MSDN

Các vấn đề liên quan