C # - เลือกที่จะยับยั้งคำเตือนเลิกใช้ที่กำหนดเอง


212

ฉันใช้Obsoleteคุณลักษณะ (ตามที่แนะนำโดยเพื่อนผู้เขียนโปรแกรม) เพื่อแสดงคำเตือนหากใช้วิธีการบางอย่าง

มีวิธีใดบ้างที่จะยับยั้งการเตือนที่คล้ายกับ CodeAnalysis ' SuppressMessageณ จุดที่การใช้นั้นถูกต้อง?

สิ่งนี้ต้องใช้งาน[Obsolete("Some message")]ซึ่งสร้างคำเตือน 618 และ[Obsolete]แอตทริบิวต์ธรรมดาโดยไม่มีข้อความที่สร้างคำเตือน 612

คำตอบ:


257

การใช้#pragma warning disable:

using System;

class Test
{
    [Obsolete("Message")]
    static void Foo(string x)
    {
    }

    static void Main(string[] args)
    {
#pragma warning disable 0618
        // This one is okay
        Foo("Good");
#pragma warning restore 0618

        // This call is bad
        Foo("Bad");
    }
}

กู้คืนคำเตือนหลังจากนั้นเพื่อที่คุณจะไม่พลาดสาย "ไม่ดี"


1
ใช้งานได้เฉพาะถ้าฉันไม่ได้ให้ข้อความด้วยแอตทริบิวต์เลิกใช้ของฉัน ฉันมีข้อความเช่นนี้: [ล้าสมัย ("นี่คือสาเหตุที่ไม่ควรใช้สิ่งนี้ - ใช้ XYZ แทน")] เมื่อฉันใส่ข้อความลงไปคำเตือนของ pragma จะปิดใช้งาน 612 หยุดทำงานและฉันจะได้รับคำเตือนโดยไม่คำนึงว่า ฉันต้องการรหัสข้อผิดพลาดอื่นแทนหรือเปล่า
Alex

2
พบมัน - หมายเลขคำเตือนที่ถูกต้องคือ 618 หากมีข้อความในแอตทริบิวต์เลิกใช้ ขอบคุณ!
Alex

2
Goodo - ฉันได้ปรับตัวอย่างเพื่อให้ตรงกับนี้
Jon Skeet

6
@George: คุณสามารถค้นหาได้ที่นี่
Jordão

3
ดูคำตอบของฉันเกี่ยวกับวิธีรับหมายเลขเตือน / ข้อผิดพลาดตั้งแต่แรก
Aaron Thoma

131

เจตนาคือการปิดการแจ้งเตือนสินค้าเสื่อมสภาพการใช้งานไม่ว่าจะสร้างจะมีเครื่องหมายหรือ[Obsolete] [Obsolete("Message")]ดังนั้นให้ใช้ทั้งCS0612 และ CS0618 :

#pragma warning disable 612, 618 

...

#pragma warning restore 612, 618 

3
นอกจากนี้โปรดทราบว่าคำเตือนจะไม่เกิดขึ้นหากการใช้งานที่ล้าสมัยอยู่ในชั้นเรียนที่ถูกทำเครื่องหมายว่าล้าสมัยแล้ว
redcalx

3
มีวิธีการปิดการใช้งานข้อผิดพลาดเช่นกันในกรณีที่Obsoleteถูกทำเครื่องหมายเป็นข้อผิดพลาดหรือไม่?
Shimmy Weitzhandler

2
@Shimmy: หากมีการทำเครื่องหมายว่าเป็นข้อผิดพลาดคุณต้องแก้ไขไม่มีข้อผิดพลาด อาจเป็นปัญหาทางไวยากรณ์โพสต์เป็นคำถามในเว็บไซต์นี้และคุณจะได้รับคำตอบที่ดี
Jordão

18

ต่อไปนี้เป็นวิธีรับหมายเลขคำเตือน / ข้อผิดพลาดตั้งแต่แรก:

  1. สร้างโครงการของคุณใหม่
  2. ไปที่หน้าต่างผลลัพธ์
  3. ค้นหาบรรทัดคำเตือน / ข้อผิดพลาดที่คุณต้องการระงับ
    ตัวอย่างเช่น:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. คัดลอกหมายเลขส่วนหลัง " CS"
  5. จากนั้นดำเนินการตามที่จอนสกีตกล่าวว่า

(ดีกว่าเสมอดำเนินการตามที่จอนสกีตกล่าวว่า ... )


9

คุณกำลังมองหา#pragmaคำเตือนปิดการใช้งานคำสั่ง

โดยพื้นฐานแล้วคุณเพิ่มคำสั่งต่อไปนี้เหนือไซต์การโทรในไฟล์. cs

#pragma warning disable 612
SomeMethodCall

612 เป็น ID ข้อความแสดงข้อผิดพลาดสำหรับการเรียกใช้เมธอดที่ล้าสมัย


ใช้งานได้เฉพาะถ้าฉันไม่ได้ให้ข้อความด้วยแอตทริบิวต์เลิกใช้ของฉัน ฉันมีข้อความเช่นนี้: [ล้าสมัย ("นี่คือสาเหตุที่ไม่ควรใช้สิ่งนี้ - ใช้ XYZ แทน")] เมื่อฉันใส่ข้อความลงไปคำเตือนของ pragma จะปิดใช้งาน 612 หยุดทำงานและฉันจะได้รับคำเตือนโดยไม่คำนึงว่า ฉันต้องการรหัสข้อผิดพลาดอื่นแทนหรือเปล่า
Alex

2
พบมัน - หมายเลขคำเตือนที่ถูกต้องคือ 618 หากมีข้อความในแอตทริบิวต์เลิกใช้
Alex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.