วิธีคืนค่าอาร์เรย์ลิเทอรัลใน C #


89

ฉันกำลังลองใช้รหัสต่อไปนี้ บรรทัดที่มีข้อผิดพลาดถูกชี้ให้เห็น

int[] myfunction()
{
    {
      //regular code
    }
    catch (Exception ex)
    {                    
       return {0,0,0}; //gives error
    }
}

ฉันจะคืนค่าตัวอักษรอาร์เรย์เช่นตัวอักษรสตริงได้อย่างไร


4
นอกจากนี้ยังไม่มีค่าอะไรที่ C # ไม่มีตัวอักษรอาร์เรย์ แต่เป็นไวยากรณ์การเริ่มต้นอาร์เรย์ซึ่งคำตอบที่ยอมรับอ้างถึง ตัวอักษรมีความพิเศษตรงที่สามารถต่ออนุกรมได้โดยตรงและสามารถกำหนดให้กับconstฟิลด์ได้ นี่ไม่ใช่กรณีของไวยากรณ์การเริ่มต้นอาร์เรย์
cwharris

คำตอบ:


167

ส่งคืนอาร์เรย์intดังนี้:

return new int [] { 0, 0, 0 };

คุณยังสามารถพิมพ์อาร์เรย์โดยปริยาย - คอมไพลเลอร์จะอนุมานได้ว่าควรเป็นint[]เพราะประกอบด้วยintค่าเท่านั้น:

return new [] { 0, 0, 0 };

6
ว้าวโฮฉันไม่รู้ว่าคุณสามารถพิมพ์อาร์เรย์โดยปริยายได้! +1
Chris Sinclair

1
ฉันพบว่าnew int [] {0,0,0}ยังใช้งานได้ มันจะชัดเจนกว่าในความคิดของฉัน
sgarg

3
@sgarg ดูเหมือนจะเหมือนกันกับคำตอบ และฉันไม่เห็นด้วยการพิมพ์อาร์เรย์โดยปริยายหมายถึงการเปลี่ยนค่าคงที่เป็นทศนิยมจะทำให้ได้ประเภทอาร์เรย์ที่ถูกต้องโดยอัตโนมัติ
NetMage

13

Blorgbeard ถูกต้อง แต่คุณอาจคิดเกี่ยวกับการใช้คลาสใหม่สำหรับ. NET 4.0 Tuple ฉันพบว่ามันง่ายกว่าที่จะทำงานเมื่อคุณมีจำนวนรายการที่จะส่งคืน เช่นถ้าคุณต้องส่งคืน 3 รายการในอาร์เรย์ของคุณเสมอทูเปิล 3-int จะทำให้ชัดเจนว่ามันคืออะไร

return new Tuple<int,int,int>(0,0,0);

หรือเพียงแค่

return Tuple.Create(0,0,0);

2
หากคุณมีจำนวนรายการที่เปลี่ยนแปลงได้ แต่ต้องการฟังก์ชันพิเศษคุณสามารถทำได้:return new List<int>(new int[]{0,0,0});
Dave

1
@ เดฟจะไม่List<int>(Enumerable.Repeat(0, 3))ดีกว่าเหรอ
NetMage

@NetMage จะดีกว่าถ้าคุณต้องการเปลี่ยนจำนวนรายการอย่างแน่นอน
Dave

10

หากอาร์เรย์มีขนาดคงที่และคุณต้องการส่งคืนอันใหม่ที่เต็มไปด้วยศูนย์

return new int[3];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.