c # Konstruktorda parametrlarni filtrlashda mavjud bo'lmagan kod aniqlandi

I am new with C# and I've encountered an warning that's saying: Unreachable code detected

Quyidagilarga o'xshash konstruktor qurilgan sinf bor:

public class FSC
{
    public string cps { get; private set; }
    public Database database;


    public string Type { get; private set; }

    public string Project
    {
        get
        {
            switch (Convert.ToInt32(Type))
            {
                case 2:
                    return "Evo";
                case 1:
                    return "NBT";
                   default: return string.Empty;
            }

        }
    }

    public FSC(string CPS, FSCServerLocator fscLoc)
    {
        if (string.IsNullOrWhiteSpace(CPS))
        {
            throw new Exception("No vin provided at initialization");

            //parameter filtering
            cps = CPS;

        }
    }
}

cps = CPS ogohlantirishini ishga tushiradi. Balki, bu katta ogohlantirish emas, lekin bu mening tushunishda yordam beradi, deb o'ylayman. Rahmat!

4
Siz ilgari istisno qilmoqdasiz, shuning uchun kodga hech qachon erishilmaydi ....
qo'shib qo'ydi muallif Ofir Winegarten, manba
Siz otib yoki qaytarsangiz, o'sha kod blokidan keyin hamma narsa e'tiborsiz qilinadi.
qo'shib qo'ydi muallif Andrew, manba

8 javoblar

Quyidagi har bir vaqtdan boshlab

string.IsNullOrWhiteSpace(CPS)

true , siz istisno qilasiz:

 throw new Exception("No vin provided at initialization");

quyidagi holatlarga erisha olmaymiz, chunki istisno qilingan bo'lsa, dastur birdan to'xtaydi.

Ehtimol, ehtimol kerak:

public FSC(string CPS, FSCServerLocator fscLoc)
{
    if (string.IsNullOrWhiteSpace(CPS))
    {
        throw new Exception("No vin provided at initialization");
    }
    cps = CPS;
}

CPS bo'sh bo'lsa, bo'sh yoki bo'sh joy bo'lganda va siz ob'ektni yaratish jarayoniga o'tmaysiz.

1
qo'shib qo'ydi

Ushbu istisnolardan qochish uchun siz konstruktorni quyidagi kodga o'zgartirishingiz kerak bo'ladi:

public FSC(string CPS, FSCServerLocator fscLoc)
{
    if (string.IsNullOrWhiteSpace(CPS))
    {
        throw new Exception("No vin provided at initialization");
    }

    //parameter filtering
    cps = CPS;
}

Edit Please see commented code below why this exception is being thrown

public FSC(string CPS, FSCServerLocator fscLoc)
{
    if (string.IsNullOrWhiteSpace(CPS))
    {
       //the exception is being thrown here.
        throw new Exception("No vin provided at initialization");

       //any code below will not be reached.
       //closing the bracket before the following statement fixes the "unreachable" code issue.
        cps = CPS;

    }
}
1
qo'shib qo'ydi

Ushbu ogohlantirish xati sizni faqat otishni o'rganishdan so'ng paydo bo'ladigan kod hech qachon kelmasligi haqida ogohlantiradi. Bu xato emas, balki faqat ogohlantirish bo'lib, sizning dasturingiz ushbu ogohlantirishdan mustaqil ravishda tuziladi. Bu sizning bu kod hech qachon davom etmasligini bilishingiz kerak bo'lgan xabardir.

0
qo'shib qo'ydi

Qisqacha aytganda, Istisno kodini tashlab qo'ysangiz, qo'ng'iroq usulida Ushalar - Ushalar harakat qilmaguningizcha kodni ijro etishni davom ettira olmaysiz (yoki zanjirni yuqoriga ko'taring) . Siz keyingi ishlov berish, masalan. Ushbu bosqichda kirish.

Agar NullReferenceException tashlanadi, nima bo'lishini o'ylab ko'ring. Keyinchalik kod bajarilmaydi.

0
qo'shib qo'ydi

Bu sizning ogohlantirishingizni olib tashlash kerak. Buning sababi, sizning if ifodangizdagi shartlar bajarilgan taqdirda, faqatgina cPS tayinlanishi.

public FSC(string CPS, FSCServerLocator fscLoc)
{
    if (string.IsNullOrWhiteSpace(CPS))
    {
        throw new Exception("No vin provided at initialization");
    }

     cps = CPS; //parameter filtering
}
0
qo'shib qo'ydi

Siz cPS ni o'rnatmasdan turib ijroni to'xtatadigan istisno qilmoqdasiz. Bu sizning muammoingizni keltirib chiqarmoqda. Cps = CPSni tashlashingiz kerak.

0
qo'shib qo'ydi
Bu noto'g'ri g'oya edi, agar u null bo'lsa, istisno qilishni nazarda tutgan bo'lishi mumkin; agar u qiymati bo'lsa, tayinlang.
qo'shib qo'ydi muallif vipersassassin, manba
Bu juda yaxshi. Rahmat!
qo'shib qo'ydi muallif Screech129, manba

Yoki:

public FSC(string CPS, FSCServerLocatyoki fscLoc)
{
    if (string.IsNullyokiWhiteSpace(CPS))
    {
        //parameter filtering 
       //other process here if any 
        cps = CPS;
        throw new Exception("No vin provided at initialization");
    }
}

yoki

public FSC(string CPS, FSCServerLocatyoki fscLoc)
{
    if (string.IsNullyokiWhiteSpace(CPS))
    {
        //parameter filtering 
        throw new Exception("No vin provided at initialization");
    }
   //other process here if any 
    cps = CPS;

}
0
qo'shib qo'ydi

kodingizni ko'ring:

    if (string.IsNullOrWhiteSpace(CPS))
    {
        throw new Exception("No vin provided at initialization");

        //parameter filtering
        cps = CPS;

    }

istisno qilsangiz, bu vazifadan chiqadi, shuning uchun otishdan keyin chiziqlar hech qachon ishlamaydi.

0
qo'shib qo'ydi