it-swarm-eu.dev

Rozdíl mezi Convert.ToDecimal (řetězec) & Decimal.Parse (řetězec)

Jaký je rozdíl v C # mezi Convert.ToDecimal(string) a Decimal.Parse(string)?

V jakých scénářích byste použili jeden přes druhého?

Jaký dopad to má na výkon?

Jaké další faktory bych měl vzít v úvahu při výběru mezi těmito dvěma?

26
YonahW

Z bytes.com :

Třída Převést je navržena tak, aby Konvertovala širokou škálu typů, takže Můžete převést více typů na desetinné místo než , Které můžete použít s Decimal.Parse, který může se zabývají pouze Stringem. Na druhé straně Vám Decimal.Parse umožňuje Zadat NumberStyle.

Desetinné a desetinné jsou aliasy a Jsou stejné.

Pro Convert.ToDecimal (řetězec), Decimal.Parse se nazývá interně.

Morten Wennevik [C # MVP]

Vzhledem k tomu, Decimal.Parse se nazývá interně Convert.ToDecimal, pokud máteextrémnípožadavky na výkon, můžete chtít držet Decimal.Parse, uloží rámec zásobníku.

39
Guy Starbuck

Je třeba mít na paměti jeden důležitý rozdíl:

Convert.ToDecimal vrátí 0 pokud je zadán řetězec null.

decimal.Parse hodí ArgumentNullException, pokud je řetězec, který chcete analyzovat, null.

45

Jedním z faktorů, o kterých jste možná nemysleli, je metoda Decimal.TryParse. Convert.ToDecimal a Parse výjimky, pokud nemohou převést řetězec na správný desetinný formát. Metoda TryParse vám poskytuje vzor Nice pro ověření vstupu.

decimal result;
if (decimal.TryParse("5.0", out result))
   ; // you have a valid decimal to do as you please, no exception.
else
   ; // uh-oh.  error message time!

Tento vzor je velmi neuvěřitelně úžasný pro kontrolu uživatelského vstupu.

15
David J. Sokol

Jeden společný návrh týkající se původního tématu - prosím použijte TryParse(), jakmile si opravdu nejste jisti, že vstupní řetězec WILL bude správně reprezentovat formát čísla.

3
dimarzionist

Hlavní rozdíl mezi Convert.ToDecimal(string) a Decimal.Parse(string) Je to, že Převést úchyty Null vzhledem k tomu, že druhá hodí výjimku

Poznámka: Nezpracovává prázdný řetězec.

1
Taran

Convert.ToDecimal zřejmě ne vždy vrátí 0. V mém výpisu linq

var query = from c in dc.DataContext.vw_WebOrders
select new CisStoreData()
{
       Discount = Convert.ToDecimal(c.Discount)
};

Sleva je po převodu z desetinného místa stále nulová? null. Nicméně, mimo Linq prohlášení, mám 0 pro stejnou konverzi. Frustrující a nepříjemné. 

0
tony95