Có một số IIf
tương đương trong C#
không? Hoặc lối tắt tương tự?iif tương đương trong C#
Trả lời
C# có toán tử bậc ba, giống như các ngôn ngữ kiểu C khác. Tuy nhiên, điều này không hoàn toàn tương đương với iif. Có hai điểm khác biệt quan trọng.
Để giải thích là người đầu tiên, điều này iif()
cuộc gọi sẽ gây ra một ngoại lệ DivideByZero mặc dù biểu thức là đúng bởi vì iif
chỉ là một chức năng và tất cả các đối số phải được thẩm định trước khi gọi:
iif(true, 1, 1/0)
Nói cách khác, iif không ngắn gọn theo nghĩa truyền thống như câu hỏi của bạn. Mặt khác, biểu thức ternary này và như vậy là hoàn toàn tốt đẹp:
(true)?1:1/0;
Sự khác biệt khác là iif
không an toàn. Nó chấp nhận và trả về các đối số của loại object
. Toán tử ternary sử dụng suy luận kiểu để biết kiểu nó đang xử lý. Lưu ý rằng bạn có thể sửa lỗi này rất dễ dàng với việc triển khai chung, nhưng trong hộp đó là cách thực hiện.
Nếu bạn thực sự muốn iif() trong C#, bạn có thể có nó:
object iif(bool expression, object truePart, object falsePart)
{return expression?truePart:falsePart; }
hoặc một/kiểu an thực hiện chung:
T iif<T>(bool expression, T truePart, T falsePart)
{ return expression?truePart:falsePart;}
Mặt khác, nếu bạn muốn toán tử ternary trong VB, Visual Studio 2008 và sau đó cung cấp một toán tử If
mới hoạt động giống như ternary của C#. Nó sử dụng suy luận kiểu để biết nó quay trở lại, và nó là một toán tử chứ không phải là một hàm vì vậy mặc dù nó có ngữ nghĩa chức năng không có vấn đề gì từ các biểu thức đánh giá trước.
VB9 không hỗ trợ toán tử ternary thực. Nếu (SomeBool, MessageBox.Show ("True"), MessageBox.Show ("False")) Như đã thấy ở đây: http://community.bartdesmet.net/blogs/bart/archive/2007/08/ 31/visual-basic-9-0-the-if-ternary-operator.aspx – snarf
Tôi đề cập đến nó trong đoạn cuối, nhưng câu hỏi cụ thể về IIf(). –
các nhà điều hành ternary
bool a = true;
string b = a ? "if_true" : "if_false";
Tôi muốn thêm một bình luận ở đó là chuỗi b = (a? "Asdf": "dsrs"); tức là có thể hiểu rõ hơn cách thức hoạt động của nó, và để thấy rằng nó không phải là một cái gì đó thực sự kỳ lạ và vô nghĩa như (string b = a)? "sdf": "sdsdf"). – barlop
Đó là các nhà điều hành ternary ?
string newString = i == 1 ? "i is one" : "i is not one";
VB.NET:
If(someBool, "true", "false")
C#
someBool ? "true" : "false";
Trong khi điều này đúng với các biểu thức đơn giản, hai biểu mẫu không chính xác tương đương nếu có các tác dụng phụ trong các biểu thức thay thế. Iif (t, foo(), bar()) sẽ gọi cả foo() và bar(), trong khi t? foo(): bar() sẽ chỉ gọi foo() hoặc bar() nhưng không phải cả hai. Xem câu trả lời của Joel Coehoorn cho câu hỏi này để biết thêm thông tin. –
Đã cập nhật câu trả lời để sử dụng chức năng "If" của VB.NET thay vì "IIf" sao cho hai khối mã tương đương nhau. –
Cũng hữu ích là các nhà điều hành liên hiệp ??:
VB:
Return Iif(s IsNot Nothing, s, "My Default Value")
C#: "?"
return s ?? "My Default Value";
booleanExpression ? trueValue : falseValue;
Ví dụ:
string itemText = count > 1 ? "items" : "item";
http://zamirsblog.blogspot.com/2011/12/c-vb-equivalent-of-iif.html
Nó bị giới hạn ở chỗ bạn không thể đặt câu trong đó. Bạn chỉ có thể đặt giá trị (hoặc những thứ mà trả lại/đánh giá các giá trị), để trở về
này hoạt động ('a' là một int tĩnh trong lớp Blah)
Blah.a=Blah.a<5?1:8;
(dấu ngoặc tròn là impicitly giữa bằng và dấu hỏi).
Điều này không hiệu quả.
Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er");
or
Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er");
Vì vậy, bạn chỉ có thể sử dụng toán tử C# ternary cho giá trị trả lại. Vì vậy, nó không giống như một hình thức rút ngắn của một nếu. Javascript và có lẽ một số ngôn ngữ khác cho phép bạn đặt các câu lệnh trong đó.
- 1. Java Tương đương với hàm iif
- 2. Tương đương Jaxb trong C#
- 3. C++ Tương đương CString trong C#
- 4. C# memcpy tương đương
- 5. C# ULONG_PTR Tương đương
- 6. Bản đồ Java tương đương trong C#
- 7. Tương đương với gói Swing trong C#
- 8. F # List.map tương đương trong C#?
- 9. matlab tic toc tương đương trong C++
- 10. Tương đương với NSMutableArray trong C++?
- 11. uniqueidentifier DataType tương đương Trong C#
- 12. C# DateTime.Ticks tương đương trong Java
- 13. Tương đương Sscanf trong mục tiêu-C
- 14. Đường dẫnKích thước tương đương trong C#
- 15. Wildcard tương đương trong C# Generics
- 16. C# tương đương với Iterator trong Java
- 17. JVM tương đương trong C# là gì?
- 18. Tương đương với C# ObservableCollection trong Java
- 19. Java System.currentTimeMillis() tương đương trong C#
- 20. Tương đương với C++ map.lower_bound trong Java
- 21. Double.doubleToLongBits tương đương với C#?
- 22. C# tương đương với shell_exec
- 23. Java Annotation C# tương đương
- 24. DoEvents tương đương với C++?
- 25. Tương đương với std :: C++ trong C++ của C++?
- 26. C tương đương với ++ STL C
- 27. python tương đương tương đương
- 28. Là getchar() tương đương với scanf ("% c") và putchar() tương đương với printf ("% c")?
- 29. Mục tiêu-C tương đương với "ghi đè" trong C#
- 30. Từ khóa mặc định của C# tương đương trong C++?
Tôi nghĩ bạn có nghĩa là "cắt ngắn", thay vì "ngắn mạch" (có ý nghĩa cụ thể liên quan đến các toán tử logic) - tôi có đúng không? – Blorgbeard