C#

2009-09-08 10 views
9

ise dönüşü ve kısa el kullanma Neden aşağıdaki kod satırı bir yöntemde çalışmıyor?C#

bool ret = (count > 0) ? true : false; 
return ret; 

Bonus Soru:

return (count > 0) ? true : false; 

Ben yaparsam mükemmel çalışıyor if ifadesi standart daha çok daha hızlı veya daha etkili midir?

bool ret = false; 
if(count > 0) 
    ret = true; 
return ret; 

Hangisini önerirsiniz?

+1

Derlemenin yanlış bir değer döndürdüğü derleme zamanı hatası olmadığına inanıyorum? – ChrisF

+0

Derleme zamanı hatasıydı ... Sözdizimde bir hata oluştu. –

+0

tersiyer işletmecisinde sıkça meydana gelen şey, ilk sonucun (say> 0) değerlendirilmesinin, işlevin kullanacağı dönüş değerini belirlemesidir. Senin fonksiyonun bool döndürdüğünü var mı?
(say> 0) değerini belirlemeye çalışırdım. Sorun buysa, tüm ifadeyi içermeniz gerekebilir:
dönüş (bool) ((say> 0)? True: false); Diğer yerlerde gördüğüm tuhaflık. Hep üçüncül operatör :) 'C' dilin daha eksiksiz grok – KevinDTimm

cevap

38

tavsiye ediyorum: açıkça true veya false dönmek gerek yoktur

return count > 0; 

bu.

Bunu söyledikten sonra, derleme hatasının beni şaşırtıyor. İlk bakışta işe yarayacak gibi görünüyor. Derleme başarısız olan kısa ama eksiksiz bir örnek gönderir misiniz? Bu koşullu ifadenin türü bool olmalıdır ve sorun yoktur. Tahminimce daha karmaşık bir senaryonuz var ve asıl sorunu ortadan kaldırdığınız örneği basitleştirerek.

Bonus sorusu ile ilgili olarak: Hangisinin daha hızlı olacağını bilmiyorum ve% 99,99'unda da umurumda değil. 'un bir sebepten dolayı yasaklanması yasaklanmadığı için önemli bir gecikmeye yol açtığını görmek için hayret ediyorum. En iyi okunabilir çözümüne gidin - bu basit bir iade deyimidir, IMO.

+1

gösterdi düşünmüşümdür, bool ret; if (count > 0) { ret = true; } else { ret = false } return ret; Ama: –

+0

Teşekkürler Jon, sorun farkedilmeden giden basit bir sözdizimi hatasıydı (genellikle SO'DA neyin yanlış olduğunu sorduğunuza kadar). Bu cevabı beğendim, daha da kısa! geri sayım> 0; –

+1

adam her zaman beni ona yendin ... –

10

bu deneyin: dönmeden önce

return count > 0; 

ifadesini sayısı> 0 değerlendirilir döner ve doğru veya yanlış verir.

return (count > 0 ? true : false); 

ama bunu yapmadı öneriyoruz:

bu da çalışması gerekir.

Her zaman yatay işlem miktarını düşük tutmaya çalışıyorum, kod okumayı daha kolay hale getirdiğine inanıyorum.

sadece sadece

return count > 0 ? false : true; 
1

bu

return (count > 0 ? true : false); 

çalışır :) karıştıracaktır Daha sonra doğru ve yanlış dışındaki değerler döndürmek yapabilirsiniz Aşağıdaki senaryoyu düşünün. Senin özel vakasında, diğer önerileri severim; geri sayım> 0; C#

return count > 0; 

bakış açısından

5

o readabilty var için daha iyidir.

Ancak derleyici, kodu seçer, böylece üç seçeneğin aslında derlendikten sonra aynıdır. Doğrulamak için IL koduna bakmayı deneyebilirsiniz!