Khi truy vấn danh sách số dương bằng cách sử dụng SingleOrDefault()
, làm cách nào tôi có thể trả lại giá trị rỗng hoặc giá trị tùy chỉnh như -1, khi không tìm thấy số trong danh sách, thay vì giá trị mặc định của loại (0 trong trường hợp này)?Làm thế nào để trả về null nếu sử dụng SingleOrDefault() và tìm kiếm một danh sách các số cho một số không có trong danh sách?
Trả lời
Bạn phải thay đổi loại trong danh sách của mình thành int?
(một int vô giá trị). Giá trị mặc định mà bạn trả lại sẽ bằng 0 cho một số nguyên. Đối với các loại tham chiếu, nó sẽ là null. Nếu không có quá tải phương thức bạn không thể làm cho giá trị retrurn mặc định là một giá trị theo yêu cầu.
Trong khi đó là sự thật; bạn có thể sửa đổi toàn bộ truy vấn (theo những cách khá đơn giản) để hoàn thành mục tiêu đó. Nó không phải là một vấn đề không thể nói chung. – Servy
Bạn có thể sử dụng:
var first = theIntegers
.Cast<int?>()
.SingleOrDefault(i => i == theValue) ?? valueIfNotFound;
này hoạt động bằng cách đúc các mục cần một Nullable<int>
, sau đó sử dụng null-coalescing operator để trả lại giá trị mà bạn chọn nếu null
được trả lại (ví dụ: không tìm thấy).
Lưu ý điều này sẽ ném nếu bạn có nhiều mục phù hợp. Nếu bạn không muốn hành vi đó, hãy sử dụng FirstOrDefault
thay vì SingleOrDefault
.
@Servy Tôi giả sử OP không nhầm lẫn bằng cách sử dụng thay vì 'FirstOrDefault' đã có một số câu trả lời sai lầm giải quyết sự lựa chọn phương pháp. – evanmcdonnal
@evanmcdonnal Nhận xét của tôi là trực tiếp tại Reed, người đã nói rằng 'SingleOrDefault' sẽ trả lại giá trị mặc định trong trường hợp 2 mục nằm trong danh sách; anh ấy đã chỉnh sửa câu trả lời của mình. Tôi cho rằng OP biết anh ta đang làm gì khi anh ta chọn sử dụng 'Single'. – Servy
@Servy Vâng, tôi đã sửa chữa thực sự - đã sai lầm khi viết nó;) (sửa ngay) –
Bạn có thể sử dụng DefaultIfEmpty
để xác định một giá trị mặc định tùy chỉnh cho một bộ sưu tập trống:
var value = numbers.Where(MyFilter)
.DefaultIfEmpty(-1) //or any other default value you want
.Single(); //OrDefault not needed; DefaultIfEmpty ensures there is an item
Không nhất thiết phải * bất kỳ * giá trị nào khác. Ví dụ, ** null **, sẽ ném một ngoại lệ. –
@TravisJ Bất kỳ giá trị nào thuộc loại đó. Bạn không thể chỉ định giá trị của một số loại hoàn toàn khác, điều đó là chính xác. Oh, và nếu giá trị nếu không thuộc loại thích hợp, nó sẽ không ném một ngoại lệ; thay vào đó nó sẽ không biên dịch *. – Servy
Có lẽ câu hỏi của bạn trở nên đơn giản vì vậy đây không áp dụng, nhưng nếu bạn chỉ tìm kiếm một số bạn đã biết và muốn trả lại một số tùy ý nếu nó không có trong danh sách, bạn có thể sử dụng phương thức Bất kỳ mở rộng:
int numberToLookFor = 42;
int arbitraryReturnOnNotFound = 17;
int result = numbers.Any(n => n == numberToLookFor) ? numberToLookFor : arbitraryReturnIfNotFound;
- 1. Tổng số danh sách các danh sách; trả về danh sách tổng hợp
- 2. Java lambda để trả về null nếu danh sách trống nếu không tổng các giá trị?
- 3. Tìm kiếm một danh sách sử dụng một chuỗi
- 4. tìm thấy nếu một số nguyên tồn tại trong một danh sách các số nguyên
- 5. Sử dụng các luồng để tìm một đối tượng trong danh sách các danh sách
- 6. Tìm cụm số trong một danh sách
- 7. Có một hàm nào có danh sách các danh sách đối số và áp dụng từng danh sách cho một hàm nhất định không?
- 8. Trả lại tổng số danh sách phụ trong danh sách
- 9. Tìm kiếm bằng Python trong danh sách các danh sách
- 10. Làm cách nào để tìm danh sách trong danh sách các danh sách có tổng số phần tử lớn nhất?
- 11. Tìm những khoảng trống trong một danh sách các số
- 12. Làm thế nào để tạo một danh sách các số nguyên riêng biệt từ một danh sách các đối tượng?
- 13. Danh sách các ước của một số
- 14. Làm cách nào để tìm kiếm danh sách nằm trong danh sách lồng nhau (danh sách danh sách) mà không có vòng lặp trong Python?
- 15. Làm thế nào để trả về một danh sách các đối tượng như một IHttpActionResult?
- 16. Tìm kiếm Hierarchical Danh sách
- 17. chèn phần tử vào danh sách và trả về cùng một danh sách được cập nhật
- 18. Cách tìm kiếm một mục trong Danh sách trong Erlang?
- 19. SQL: Tìm kiếm danh sách các cột có giá trị đã cho (trong một hàng)
- 20. Sử dụng Lợi nhuận và trả về danh sách lỗi
- 21. Làm thế nào để tìm pymongo() trả về một danh sách?
- 22. Làm cách nào để chuyển danh sách dưới dạng danh sách các đối số trong vợt?
- 23. Danh sách URL trả lại cho Tìm kiếm của Google
- 24. MongoDB tìm giá trị trong danh sách các danh sách
- 25. Tìm nếu Long (trong danh sách) có thể vừa với Danh sách các giá trị Dài
- 26. tìm kiếm một danh sách các thành phố
- 27. danh sách tìm kiếm cakephp
- 28. Python tìm các phần tử trong một danh sách không nằm trong một danh sách khác
- 29. R: sử dụng danh sách cho các đối số ellipsis
- 30. Làm thế nào để có được một danh sách các trục cho một hình trong pyplot?
bạn không thể thay đổi hành vi của SingleOrDefault, nó sẽ trả về mặc định đối tượng, trong trường hợp int, 0, trong trường hợp int? -> null. Hãy thực hiện một trong các cách tiếp cận được đăng bên dưới để giải quyết vấn đề đó;) – MichaC
@Ela Tôi hiểu điều đó. Mục đích của câu hỏi của tôi là để có được xung quanh đó. –