2008-11-24 29 views

Trả lời

203

Vấn đề là bạn đang gọi điện thoại List<T>.Reverse() trả về void.

Bạn có thể hoặc là làm:

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>(); 
names.Reverse(); 

hay:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>(); 

Sau đó là tốn kém hơn, như đảo ngược một tùy IEnumerable<T> bao gồm đệm tất cả các dữ liệu và sau đó năng suất tất cả - trong khi List<T> có thể làm tất cả việc đảo chiều "tại chỗ". (Sự khác biệt ở đây là nó gọi phương thức Enumerable.Reverse<T>() gia hạn, thay vì phương pháp List<T>.Reverse() ví dụ.)

hiệu quả hơn nữa, bạn có thể sử dụng:

string[] namesArray = "Tom,Scott,Bob".Split(','); 
List<string> namesList = new List<string>(namesArray.Length); 
namesList.AddRange(namesArray); 
namesList.Reverse(); 

Điều này tránh tạo ra bất kỳ bộ đệm của một kích thước không phù hợp - với chi phí lấy bốn phát biểu mà một người sẽ làm ... Như mọi khi, hãy cân nhắc khả năng đọc đối với hiệu suất trong trường hợp sử dụng thực tế.

+21

một con thú! – flesh

+2

cũng được xây dựng, tôi thực sự đánh giá cao! –

1

Hãy thử điều này:

List<string> names = new List<string>("Tom,Scott,Bob".Split(',')); 
names.Reverse(); 
+0

Tôi gặp lỗi - Không thể chuyển đổi hoàn toàn loại 'void' thành 'System.Collections.Generic.List BuddyJoe

+1

Tôi vừa thử nó và nó hoạt động hoàn hảo – Yona

3
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList(); 

Chế độ này hoạt động.

1

Điều bạn thiếu ở đây là .Reverse() là phương thức trống. Không thể gán kết quả của .Reverse() cho một biến. tuy nhiên bạn có thể thay đổi để sử dụng Enumerable.Reverse() và nhận kết quả của bạn

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>() 

Sự khác biệt là Enumerable.Reverse() trả về một IEnumerable <T> thay vì khoảng trống trở

7

Tôi nhận ra rằng câu hỏi này là khá cũ, nhưng tôi đã có một vấn đề tương tự, ngoại trừ chuỗi của tôi có không gian bao gồm trong nó. Đối với những người cần biết cách tách một chuỗi không chỉ bằng dấu phẩy:

string str = "Tom, Scott, Bob"; 
    IList<string> names = str.Split(new string[] {","," "}, 
    StringSplitOptions.RemoveEmptyEntries); 

StringSplitOptions loại bỏ các bản ghi sẽ chỉ là một dấu cách ...

+0

Điều này sẽ không hoạt động nếu bạn có "Tom Cruise" thay vì chỉ Tom – ablaze

+0

https://stackoverflow.com/a/45799171/799593 – ablaze

0

Nếu bạn đang cố gắng

  1. Sử dụng nhiều delimiters
  2. Lọc bất kỳ chuỗi rỗng
  3. Trim hàng đầu/dấu không gian

sau nên làm việc:

string str = "Tom Cruise, Scott, ,Bob | at"; 
IEnumerable<string> names = str 
          .Split(new char[]{',', '|'}) 
          .Where(x=>x!=null && x.Trim().Length > 0) 
          .Select(x=>x.Trim()); 

Đầu ra

  • Tom
  • Cruise
  • Scott
  • Bob
  • tại

Bây giờ bạn rõ ràng là có thể đảo ngược thứ tự như những người khác đề nghị.

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