2010-06-23 14 views
6
int expenseCode; 
if (int.TryParse(sourceRecord.ExpenseCode, out expenseCode) && _ExpenseCodeLookup.ContainsKey(expenseCode)) 
{ 
    destRow.PROFIT_CENTER_NAME = _ExpenseCodeLookup[expenseCode]; 
} 
else 
    destRow.PROFIT_CENTER_NAME = "Unknown"; 

Ben ilk ifadesi her zaman ikinci operasyon öncesi (sürecindeki expenseCode ayarı) idare edilecek yaklaşık conerned duyduğum şey?Bu durum, kötü şeylerin olmasına neden olacak mı?

cevap

15

Sorun değil. &&, C# 'da kısa devre yapıyor ve out parametresinintarafından ContainsKey numaralı telefona çağrılmadan önce uygun değeri atandı.

Öte yandan

, sen değerini almak için tekrar aynı numarayı kullanabilirsiniz:

string profitCenter; 
int expenseCode; 
if (int.TryParse(sourceRecord.ExpenseCode, out expenseCode) && 
    _ExpenseCodeLookup.TryGetValue(expenseCode, out profitCenter)) 
{ 
    destRow.PROFIT_CENTER_NAME = profitCenter; 
} 
else 
{ 
    destRow.PROFIT_CENTER_NAME = "Unknown"; 
} 

sadece bir kez gider kodunun arama yapıyoruz Bu şekilde.

+0

TryGetValue'daki ipucu için teşekkürler! –

6

Hayır, kötü şeylerin olmasına neden olmaz!

&& işleci, sol işlenenin false değerini değerlendirirse, doğru işleneni değerlendirmemeyi garanti eder. Buna kısa devre denir.

Benzer şekilde, || işleci, sol işlenen doğru olarak değerlendirilirse, doğru işleneni değerlendirmez.

Bu işleçlerin boole değerleri için kısa devre dışı olmayan sürümleri & ve |'dur. Sol tarafın değerinden bağımsız olarak her iki işleneni de değerlendireceklerdir.

3

Açıklama, && kısa devre olacak, bu da sağ tarafın sol tarafa bağlı olduğu anlamına gelir. Bu nedenle, TryParse, true değerini döndürürse, expenseCode geçerli bir tam sayı ile doldurulur ve sonra sağ işlev yürütülür.

İlgili konular