ใน Perl (และภาษาอื่น ๆ ) ผู้ประกอบการที่มีเงื่อนไขสามารถแสดงได้ดังนี้:
my $foo = $bar == $buz ? $cat : $dog;
มีผู้ประกอบการที่คล้ายกันใน VB.NET หรือไม่?
ใน Perl (และภาษาอื่น ๆ ) ผู้ประกอบการที่มีเงื่อนไขสามารถแสดงได้ดังนี้:
my $foo = $bar == $buz ? $cat : $dog;
มีผู้ประกอบการที่คล้ายกันใน VB.NET หรือไม่?
คำตอบ:
ขึ้นอยู่กับรุ่น ตัวIfดำเนินการใน VB.NET 2008 เป็นตัวดำเนินการที่ประกอบไปด้วย (รวมถึงตัวดำเนินการรวมกันเป็นโมฆะ) นี่เป็นเพียงการแนะนำก่อนปี 2008 นี้ไม่สามารถใช้ได้ นี่คือข้อมูลเพิ่มเติม: Visual Basic หากประกาศ
ตัวอย่าง:
Dim foo as String = If(bar = buz, cat, dog)
[แก้ไข]
ก่อนหน้าปี 2008 มันเคยเป็นIIfสิ่งที่เกือบจะเหมือนกันกับIfโอเปอร์เรเตอร์ที่อธิบายข้างต้น
ตัวอย่าง:
Dim foo as String = IIf(bar = buz, cat, dog)
Iifคืนค่าประเภทของวัตถุเสมอObjectในขณะที่If(bool, obj, obj)ช่วยให้การตรวจสอบประเภทด้วยตัวเลือกที่เข้มงวด ( Dim var As Integer = Iif(true, 1, 2)จะไม่คอมไพล์ด้วยตัวเลือกที่เข้มงวดเพราะคุณสามารถเขียนได้อย่างง่ายดายDim var As Integer = Iif(true, new Object(), new Object())คุณสามารถเขียนDim var As Integer = If(true, 1, 2)ด้วยตัวเลือกที่เข้มงวดได้เนื่องจากจะตรวจสอบประเภทที่ส่งคืน)
iif มีให้บริการใน VB เสมอแม้ใน VB6
Dim foo as String = iif(bar = buz, cat, dog)
ไม่ใช่ตัวดำเนินการจริงเช่นนั้น แต่ฟังก์ชันใน namespace Microsoft.VisualBasic
หาก () ใกล้เคียงที่สุด แต่ระวังการแปลงโดยนัยที่เกิดขึ้นหากคุณตั้งค่า "Option Strict off"
ตัวอย่างเช่นหากคุณไม่ระวังคุณอาจต้องลองทำสิ่งต่อไปนี้
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
จะให้ค่า "foo" เป็น 0!
ฉันคิดว่า '?' ตัวดำเนินการเทียบเท่าใน C # จะล้มเหลวในการรวบรวมแทน
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)เพียงเพื่อความสมบูรณ์ในทางที่ดีขึ้นในการเขียนการแสดงออกที่เป็น
Option Strict Onหมายเหตุว่าเรื่องนี้ก็เกิดขึ้นกับ เหตุผลก็คือว่าNothingใน VB.NET เทียบเท่ากับ C # 's มากกว่าที่จะdefault(T) null
CType(Nothing, DateTime?)