2008-09-19 70 views
12

tôi nhận thấy trong bài khác, ai đó đã làm một cái gì đó như:System.Convert.ToInt vs (int)

double d = 3.1415; 
int i = Convert.ToInt32(Math.Floor(d)); 

Tại sao họ sử dụng chức năng chuyển đổi, chứ không phải là:

double d = 3.1415; 
int i = (int)d; 

mà có một sàn ngầm và chuyển đổi.

Ngoài ra, liên quan đến nhiều hơn, tôi nhận thấy ở một số mã sản xuất Tôi đang đọc:

double d = 3.1415; 
float f = Convert.ToSingle(d); 

Đó có phải là giống như:

float f = (float)d; 

Có phải tất cả những người chuyển đổi khác tiềm ẩn chỉ trong lớp Chuyển đổi cho đầy đủ, hoặc họ phục vụ một mục đích? Tôi có thể hiểu một nhu cầu cho. ToString(), nhưng không phải là phần còn lại.

Trả lời

12

Đúc để int là cắt ngắn ngầm, không sàn ngầm:

double d = -3.14; 
int i = (int)d; 
// i == -3 

tôi chọn Math.floor hoặc Math.round để làm cho ý định của tôi rõ ràng hơn.

1

Bạn có thể sử dụng Chuyển đổi khi bạn có một chuỗi mà bạn muốn chuyển đổi sang một Chuyển đổi int

int i = Convert.ToInt32("1234"); 

và đúc cả hai sẽ ném một ngoại lệ nếu họ thất bại.

tức là, đây vẫn sẽ ném một ngoại lệ, nó sẽ không trở lại 0:

Convert.ToInt32("1234NonNumber"); 

Trong nhiều trường hợp chuyển đổi và đúc sẽ có kết quả như nhau, nhưng một dàn diễn viên thường lần là dễ đọc hơn.

+0

Không 'Int32.Parse (Chuỗi): Int32' thực sự chuyển đổi chuỗi thành int? –

+0

Int32.Parse sẽ chuyển đổi một chuỗi "số" thành một int và nó sẽ ném một ngoại lệ nếu chuyển đổi không thành công. Int32.TryParse sẽ trả về false nếu chuyển đổi thất bại trong khi chuyển đổi.ToInt32 sẽ trả về 0 nếu chuyển đổi thất bại. –

1

Convert.ToInt32() được sử dụng trên chuỗi (http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx) trong khi truyền chỉ có thể được sử dụng trên các loại có bộ chuyển đổi nội bộ (kiểu số). Bí quyết thực sự đến trong việc quyết định giữa Int32.Parse và Convert.ToInt32(). Convert.ToInt32() là khoan dung của một tham số null và trả về 0 trong khi Int32.Parse() sẽ ném một ArgumentNullException.

3

làm tròn cũng được xử lý khác nhau:

x = -2.5 (int) x = -2 Convert.ToInt32 (x) = - 2
x = -1.5 (int) x = -1 Chuyển đổi. ToInt32 (x) = - 2
x = -0,5 (int) x = 0 Chuyển đổi.ToInt32 (x) = 0
x = 0,5 (int) x = 0 Chuyển đổi.ToInt32 (x) = 0
x = 1,5 (int) x = 1 Chuyển đổi.ToInt32 (x) = 2
x = 2,5 (int) x = 2 Chuyển đổi.ToInt32 (x) = 2

Không xâu x = -1,5 và x = 1,5 trường hợp.
Trong một số thuật toán, phương pháp làm tròn được sử dụng rất quan trọng để nhận được câu trả lời đúng.