ใน 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?
)