2011-09-06 29 views
15

Nếu tôi cố gắng để làm điều này nó không hoạt động:Tại sao tôi không thể truyền một đoạn int vào chuỗi?

static void Main(string[] args) 
{ 
    int a = 5000; 
    Console.WriteLine((string)a); 
} 

Nhưng bằng cách nào đó này hoạt động tốt:

static void Main(string[] args) 
{ 
    int a = 5000; 
    Console.WriteLine(a + ""); 
} 

Tại sao vậy? Có phải vì người đầu tiên đang cố gắng thay đổi loại cơ sở và thứ hai chỉ thêm giá trị vào chuỗi?

Trả lời

46

int không thể được đúc để string (1), nhưng có một nhà điều hành + chấp nhận int như là đối số trái tay và string như là đối số bên tay phải (2). Toán tử này chuyển đổi int thành string và nối hai số string giây.

Cách tiếp cận tốt hơn có thể là chỉ sử dụng Console.WriteLine(a); gọi số a.ToString() cho bạn.

+4

Upvote để xác định đó là toán tử thực hiện chuyển đổi. – Ray

+0

aka, bạn hiểu sai về toán tử truyền, không nên gọi phương thức toString. – fbstj

+1

Tôi không thể tìm thấy toán tử được xác định trên 'Chuỗi' hoặc' Int32' ... Nó được định nghĩa ở đâu? –

5

Bạn nên sử dụng:

static void Main(string[] args) 
{ 
    int a = 5000; 
    Console.WriteLine(a); 
} 

rằng mặc nhiên gọi a.ToString()

+0

bất cứ điều gì nó sử dụng ... nó hoạt động. Không có nơi nào trong câu hỏi đã làm nó nói bất cứ điều gì về nhà điều hành +. Câu hỏi đã hỏi tại sao nó không hoạt động ... câu trả lời này, và những người khác, chỉ ra tại sao. – WernerCD

7

Vì vậy, bạn đang nhận được một lỗi thời gian biên dịch phải không? Vấn đề là ở chỗ int không rõ ràng bỏ qua chuỗi.

Vì vậy

(string)a 

không phải là mã hợp lệ nhưng

a + "" 

có nghĩa là mã sẽ làm việc vì nó về cơ bản được dịch sang

a.ToString() + "" 

Vì vậy, int được chuyển đổi thành một giá trị chuỗi

+0

Không thể viết toán tử chuyển đổi quá tải từ int thành chuỗi. Bạn sẽ viết toán tử loại nào? (Chúng tôi xem xét thêm "nhà khai thác chuyển đổi mở rộng" vào C# 4 nhưng không bao giờ vượt qua giai đoạn thiết kế.) –

+0

@Eric, tất nhiên bạn đúng (đáng ngạc nhiên), tôi đã nghĩ tôi có thể làm như với phương pháp mở rộng. Không bao giờ cần thiết để làm điều đó trước đây, và không bao giờ cố gắng cho đến bây giờ. Chỉ cần một cái gì đó tôi giả định là có thể. Ngay cả khi bạn đã thêm nó tôi không nghĩ rằng tôi sẽ sử dụng. Nó có thể gây hiểu lầm vì nó sẽ không được rõ ràng rằng nó đã được sử dụng một phần mở rộng và nó có thể gây nhầm lẫn lập trình khác khi đọc một số mã – musefan

0

Điều đó không làm việc bởi vì như bạn đã gán một integer giá trị hoàn toàn vào một bạn không thể chuyển đổi nó thành string bởi một chuyển đổi ngầm, nhưng mà sẽ làm việc như sau

static void Main(string[] args) 
    { 
     int a = 5000; 
     Console.WriteLine(a); 
    } 

tương đương với Console.WriteLine(a.ToString());

1

Để đúc một int trong một chuỗi bạn phải sử dụng Int32.Parse (string)

đó là không đúng, phương pháp phân tích cú pháp của Int32 trả về một số nguyên, được phân tách từ một chuỗi .

Để lấy biểu diễn chuỗi của một kiểu dữ liệu khác chỉ sử dụng .ToString() từ Lớp đối tượng. Hoặc bạn sử dụng System.Convert.ToString()

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