Sự khác biệt giữa các chuỗi String và các chuỗi dây trong trong .NET và tốt nhất?


14

Trong .NET Framework, ít nhất là trong ngôn ngữ C #, chúng tôi có hai "phiên bản" của loại chuỗi:

  • "chuỗi"
  • "Chuỗi"

Có vẻ như chúng có thể thay thế cho nhau, nhưng chúng có thực sự? Nếu chúng không thể thay thế cho nhau, thì nói chung là tốt hơn để sử dụng cái này thay vì cái kia, và trong hoàn cảnh nào?


1
Tương tự với câu hỏi này: stackoverflow.com/q/6000517/6504
Agent_9191

2
Về mặt phong cách, tôi có xu hướng sử dụng phiên bản chữ thường khi tôi đề cập đến loại và phiên bản chữ hoa khi tôi gọi một phương thức tĩnh của System.String.
Joel Mueller


2
stringkhông tồn tại .net, nó chỉ tồn tại trong C #.
CodeInChaos

1
Mặc dù điều này có thể phù hợp hơn một chút với Stack Overflow, tôi không nghĩ nó hoàn toàn lạc đề đối với các lập trình viên và vì Stack Overflow đã có ít nhất một bản sao nên sẽ không có nhiều điểm trong việc di chuyển này. Vì vậy, vui lòng dừng gắn cờ / bỏ phiếu đóng để di chuyển, nếu bạn cảm thấy điều này nên được đóng lại, điều đó thật tuyệt, nhưng nó nên được đóng lại không được di chuyển.
yannis

Câu trả lời:


30

Theo MSDN

chuỗi là bí danh cho Chuỗi trong .NET Framework.

Trong đó "Chuỗi" là trên thực tế System.String.

Tôi sẽ nói rằng chúng có thể thay thế cho nhau và không có sự khác biệt khi nào và nơi bạn nên sử dụng cái này hay cái khác.

Nó sẽ tốt hơn để phù hợp với cái mà bạn đã sử dụng mặc dù.


vì lý do nào đó tôi đã có nó trong đầu rằng String là một lớp bao quanh một chuỗi giá trị được gõ và điều này dẫn đến ý tưởng về quyền anh ... tôi có hoàn toàn sai ở đây không?
Aaron Anodide

1
@Gabriel Không, String(và do đó stringbằng bí danh) là các loại tham chiếu.
Kris Harper

@Gabriel: Java không làm điều đó với những thứ như byte vs Byte?
whatsisname

Điều này cũng đúng với Double vs double và các loại dữ liệu khác phải không?
Gavin Coates

1
@AaronAnodide Tôi tin rằng đó là một quy ước Java, có lẽ là nơi bạn đã nghe nói về nó.
KChaloux

20

Như đã chỉ ra, chúng là những thứ giống nhau và stringchỉ là bí danh String.

Đối với những gì nó có giá trị, tôi sử dụng stringđể khai báo các loại - biến, thuộc tính, trả về giá trị và tham số. Điều này phù hợp với việc sử dụng các loại hệ thống khác - int, bool, varvv (mặc dù Int32Booleancũng là chính xác).

Tôi sử dụng Stringkhi sử dụng các phương thức tĩnh trên lớp String, như String.Split()hoặc String.IsNullOrEmpty(). Tôi cảm thấy rằng điều này có ý nghĩa hơn bởi vì các phương thức thuộc về một lớp và nó phù hợp với cách tôi sử dụng các phương thức tĩnh khác.


Chúng tôi sử dụng quy ước này trong công việc là tốt, và tôi thích nó. Bộ não của tôi tự động tạo ra kết nối.
SBI

4

Tôi muốn đề nghị sử dụng chữ thường string. Uppercase Stringsẽ sử dụng lớp đầu tiên có tên String mà nó tìm thấy trong các không gian tên được nhập ... thường là vậy System.String. Thay vào đó, lớp String của riêng bạn có thể được sử dụng.


3
Nếu bạn có hai loại nhập khác nhau có cùng tên và bạn sử dụng tên đó mà không đủ điều kiện không gian tên, bạn sẽ gặp lỗi.
Svick

Có thể lừa Stringđể làm việc, không bao giờ có thể lừa string.
Bryan Boettcher

Tuy nhiên, tôi không nghĩ đó là một lý do đủ tốt để sử dụng string.
Svick

5
Làm thế nào "một người có thể phá vỡ" so với "một người sẽ không bao giờ phá vỡ" với tất cả những người khác giống hệt nhau không phải là một lý do đủ tốt?
Bryan Boettcher

4

string là một từ khóa C # đơn giản là một bí danh cho System.String

.. nhưng vì nó là một từ khóa, trình soạn thảo tô màu cú pháp / IDE của bạn sẽ hiển thị nó theo màu từ khóa, giống như int, double, if, other, v.v. Về mặt phong cách, bạn có thể thích sử dụng từ khóa hơn là System.Stringloại (hoặc chỉ Stringsau bạn đã hoàn thành using System;).

Đây là một điểm thích hợp mặc dù, như mặc dù bool, char, int, doublestringlà tất cả bí danh từ khóa với nhiều loại hệ thống, stringlà một lẻ one-out vì nó là một loại tài liệu tham khảo và những người khác là kiểu giá trị.


4
objectcũng là một bí danh từ khóa cho một loại tham chiếu
nikie

Ồ vâng, tôi đã quên tất cả về điều đó - cảm ơn vì đã nhắc nhở.
JBRWilkinson

2

stringchỉ là một bí danh cho String, cuối cùng chúng giống nhau.

Bạn có thể sử dụng bất cứ gì bạn thích, mặc dù tôi thường sử dụng stringkhi tôi đang lập kế hoạch về việc sử dụng nó giống như một kiểu dữ liệu cơ bản (tương tự int, floathoặc bool) và Stringkhi tôi đang lên kế hoạch về việc sử dụng nó như là một đối tượng / lớp. Ví dụ:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

Trong trường hợp trên, tôi dự định sử dụng foođơn giản để lưu trữ một số văn bản (có hiệu quả như nguyên thủy), vì vậy tôi sử dụng string; tuy nhiên, khi tôi gọi String.isNullOrWhitespace(string)tôi sử dụng String. Tôi làm điều này, bởi vì nói chung chữ cái đầu tiên của tên lớp được viết hoa ( String) trong khi chữ cái đầu tiên của nguyên thủy (chẳng hạn int) thì không.


-2

Chuỗi được sử dụng với không gian tên System.String, chuỗi được sử dụng đặc tả trình biên dịch C #, hơn nữa System.String là giá trị loại tham chiếu. Bạn được ưu tiên để đối phó với các đối tượng Hệ thống, chuỗi chỉ cho mục đích chữ. Hệ thống và hệ thống đều làm việc như nhau.

string TC = new System.String('/', 5);

Chuỗi được sử dụng để so sánh, bằng nhau và các mục đích khác là tốt.


4
điều này dường như không cung cấp bất cứ điều gì đáng kể so với 6 câu trả lời trước
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.