2009-09-24 8 views
6

Sto lavorando al porting di un codice VB6 classico su C# e mi sono imbattuto in un utilizzo della funzione PV.Funzione PV e porta da VB6 a C#

Mi sento in errore includendo un riferimento all'assembly Microsoft.VisualBasic. È qualcosa che si fa comunemente, o dovrei esplorare ulteriori opzioni. La prossima idea che mi viene in mente è esplorare questa funzione PV in Reflector.

risposta

10

L'utilizzo di Microsoft.VisualBasic da C# e VB.NET è stato discusso a fondo sotto this question. Lo spazio dei nomi Microsoft.VisualBasic è fully supported, e sarà in giro finché .Net è in giro. Non c'è ragione di evitarlo.

EDIT: E 'significativo che, al momento della digitazione, le altre risposte a questa domanda sono un errata reimplementazione della funzione, e un one-man-band biblioteca non supportato da gallerie di codice. Andiamo ragazzi, ci vorrebbe un vero major event per Microsoft per abbandonare le funzioni finanziarie da VB.

E 'una storia diversa per Microsoft.VisualBasic.Compatibility, che è esclusivamente per l'uso da parte l'aggiornamento guidato VB6, EDITora è stata segnata obsoleto in .Net 4 (la mia previsione si è avverato), e non dovrebbe essere usato per nuovi sviluppi. Ci sarebbero alcuni vantaggi nella rimozione dei riferimenti a questo, ma personalmente probabilmente proverei a realizzare una porta completamente funzionante prima di fare riferimento a 3.5 3.5.

+3

D'accordo al 100% con questo. Da dove proviene questa riluttanza a utilizzare la libreria supportata da Microsoft? E 'solo la mentalità di "ewwww ... dice VB"? WTF? Microsoft ha scritto VB6, C# e ha quindi fornito (gratuitamente) lo spazio dei nomi Microsoft.VisualBasic per JUST THIS PURPOSE. E ancora le persone esitano ad usarlo. Qualunque cosa - Risolvi le tue possibilità con qualche altra opzione "non VB, quindi migliore". – JeffK

+1

Solo per aggiungere: Alla fine della giornata, è tutto IL. Posso scrivere cose in C#, Visual Basic.NET, IronPython e Boo e lanciare tutto in Blender (= compilatori) e recuperare IL che non sa cosa fosse prima. –

+4

C'è uno stigma contro l'utilizzo di VB tra gli sviluppatori C# e quindi perché questo ha VisualBasic nel nome non piace perché pensano che stiano programmando in VB. Forse MS dovrebbe rinominarlo in 'Microsoft.ReallyUsefulAndFullySupportedFunctions' e tutti saranno felici –

1

Si potrebbe usare questa libreria che duplica le funzioni di Excel in F #

Library

Ha PV, che è il valore attuale. L'ho usato una o due volte. Basta rilasciarlo e aggiungere il riferimento.

+1

hmmm sembra tipo di rischioso fare affidamento su una lingua CTP ma penso che io preferirei farlo se non riferimento alla libreria Microsoft.VisualBasic – Dave

+0

Esattamente, quando ho usato, era di evitare l'automazione Excel e fa riferimento a Excel – Gratzy

+0

Il La versione "NotStandAlone" è quasi 1 meg ... quasi tentata di aggirare la funzione PV da Reflector, ma darò uno scatto – Dave

3

piuttosto semplice da replicare in C#

public static double PV(double Rate, int nPer, double Pmt, double FV, bool Type) 
    { 
     double ann = Math.Pow(1 + Rate, nPer); 
     return -(FV + Pmt * (1 + (Type ? Rate : 0)) * ((ann - 1)/Rate))/ann; 
    } 

Solo un riassetto della formula Microsoft provides.

+3

È quasi un riarrangiamento della formula di Microsoft, tranne quando rate = 0. Questo è quando la tua versione si divide per zero, e VB6 e Microsoft.VisualBasic restituiscono '-fv - (pmt * nper)'. Ci sono delle insidie ​​anche nella codifica di una formula da una pagina web. Ciò rafforza la mia risposta - per carità solo ** usa Microsoft.VisualBasic ** e passa a implementare qualcosa di altre funzionalità per i vecchi utenti poveri. – MarkJ