"Use" blokli ifodasini ishlatganda else ifodasini ishlatishning eng yaxshi usuli?

Menda ikkita yangi ob'ekt mavjud bo'lgan stsenariy mavjud, unda faqat bitta holatga ko'ra boshlash kerak.

Biroq, yangi ob'ektni ishga tushirish uchun "foydalanish" blok so'zini ishlataman.

Bunga qanday erishishim mumkin? Iltimos, quyidagi stsenariyni ko'ring.

int a;
string b;

if()//some codition
{
    using(MyClass c1 = new MyClass(a))
    { 
            SomeMethod();
    }
}
else
{
    using(MyClass c1 = new MyClass(b)
    {
             SomeMethod();
    }
}

Buni bitta holatda yoki kodni kamaytirishning boshqa usullaridan foydalanishga erishishning yana bir yo'li bormi? chunki men har ikkala usulda ham xuddi shu usulni chaqiryapman.

Oldindan rahmat.

Hurmat bilan, Anish

4
dan foydalanib ni ishlatishingiz mumkin.
qo'shib qo'ydi muallif Alessandro D'Andria, manba
@ AlessandroD'Andria a va b turli xil, shuning uchun uchinchi operator to'g'ridan-to'g'ri bulardan kompilyatsiya qilmaydi.
qo'shib qo'ydi muallif Adam Houldsworth, manba
@ AlessandroD'Andria a va b turli xil, shuning uchun uchinchi operator to'g'ridan-to'g'ri bulardan kompilyatsiya qilmaydi.
qo'shib qo'ydi muallif Adam Houldsworth, manba
Agar shartingiz nima?
qo'shib qo'ydi muallif Afnan Ahmad, manba

7 javoblar

Shartli (Ternary) Operatordan foydalanishingiz mumkin.

int a;
string b;

using(MyClass c1 = (some condition) ? new MyClass(a) : new MyClass(b))
{
    SomeMethod();
}
6
qo'shib qo'ydi
@ john - yo'q, shartli operator deb ataladi. Ba'zi odamlar uni deb chaqirishadi, chunki eng tillari faqat bitta uchinchi operatorni o'z ichiga oladi va shartli operator.
qo'shib qo'ydi muallif Damien_The_Unbeliever, manba
Shartli uch tomonlama operator deb ataladi: msdn.microsoft. com/en-us/kutubxona/zakwfxx4 (v = vs.100) .aspx
qo'shib qo'ydi muallif john, manba
@Damien_The_Unbeliever Men sharhlarimni MSDN-ga ko'ra yangiladim :) Uni "uch tomonlama" dan o'zgartirmoqchi bo'ldim, ammo tahrirni bir oz muvaffaqiyatsiz tugatdim.
qo'shib qo'ydi muallif john, manba
a va b ni belgilash uchun faqatgina bitta +1 uchun uchinchi operatorni o'zlari qondira olmaydi.
qo'shib qo'ydi muallif Adam Houldsworth, manba
@Damien_The_Unbeliever G'ayritabiiy bo'lsa, men uni uchinchi operator deb atayman, lekin boshqa tillardan boshqa tajribalarim yo'q, faqat shuning uchun uni boshqa birovga paxta terishga majburman.
qo'shib qo'ydi muallif Adam Houldsworth, manba
rahmat sizlarga ..
qo'shib qo'ydi muallif Anish, manba

Shartli (Ternary) Operatordan foydalanishingiz mumkin.

int a;
string b;

using(MyClass c1 = (some condition) ? new MyClass(a) : new MyClass(b))
{
    SomeMethod();
}
6
qo'shib qo'ydi
@ john - yo'q, shartli operator deb ataladi. Ba'zi odamlar uni deb chaqirishadi, chunki eng tillari faqat bitta uchinchi operatorni o'z ichiga oladi va shartli operator.
qo'shib qo'ydi muallif Damien_The_Unbeliever, manba
Shartli uch tomonlama operator deb ataladi: msdn.microsoft. com/en-us/kutubxona/zakwfxx4 (v = vs.100) .aspx
qo'shib qo'ydi muallif john, manba
@Damien_The_Unbeliever Men sharhlarimni MSDN-ga ko'ra yangiladim :) Uni "uch tomonlama" dan o'zgartirmoqchi bo'ldim, ammo tahrirni bir oz muvaffaqiyatsiz tugatdim.
qo'shib qo'ydi muallif john, manba
a va b ni belgilash uchun faqatgina bitta +1 uchun uchinchi operatorni o'zlari qondira olmaydi.
qo'shib qo'ydi muallif Adam Houldsworth, manba
@Damien_The_Unbeliever G'ayritabiiy bo'lsa, men uni uchinchi operator deb atayman, lekin boshqa tillardan boshqa tajribalarim yo'q, faqat shuning uchun uni boshqa birovga paxta terishga majburman.
qo'shib qo'ydi muallif Adam Houldsworth, manba
rahmat sizlarga ..
qo'shib qo'ydi muallif Anish, manba

Kodni qisqartirish uchun uni bitta holatda yoki boshqa usulda amalga oshirishning yana bir yo'li bormi?

Ha sen qila olasan.

using (MyClass c1 = condition ? new MyClass(a) : new MyClass(b))
{
    SomeMethod();
}

?: is a Ternary operator which as the name suggests, works on 3 operands.

2
qo'shib qo'ydi

Kodni qisqartirish uchun uni bitta holatda yoki boshqa usulda amalga oshirishning yana bir yo'li bormi?

Ha sen qila olasan.

using (MyClass c1 = condition ? new MyClass(a) : new MyClass(b))
{
    SomeMethod();
}

?: is a Ternary operator which as the name suggests, works on 3 operands.

2
qo'shib qo'ydi

Haqida:

using (var c1 = condition ? new MyClass(a) : new MyClass(b))
{
    SomeMethod();
}
2
qo'shib qo'ydi

Haqida:

using (var c1 = condition ? new MyClass(a) : new MyClass(b))
{
    SomeMethod();
}
2
qo'shib qo'ydi
  IDisposable target = somecondition ?  new MyClass(a)  : new MyClass(b) ;
  using (IDisposable c1 = target )
  {
                SomeMethod();
  }
1
qo'shib qo'ydi
a va b har xil turdagi.
qo'shib qo'ydi muallif Vijay, manba