2009-09-24 17 views
6

Estoy trabajando en portar algún código VB6 clásico a C# y simplemente tropecé con el uso de la función PV.Función PV y Porting VB6 a C#

Me siento mal, incluida una referencia al ensamblado de Microsoft.VisualBasic. ¿Es esto algo que se hace comúnmente, o debería explorar otras opciones? La siguiente idea que me viene a la mente es explorar esta función PV en Reflector.

Respuesta

10

El uso de Microsoft.VisualBasic de C# y VB.NET se ha discutido exhaustivamente en this question. El espacio de nombres Microsoft.VisualBasic es fully supported, y estará disponible mientras .Net esté disponible. No hay razón para evitarlo.

EDIT: Se dice que en el momento de escribir, las otras respuestas para esta pregunta son una incorrecta reimplementación de la función, y una biblioteca sin apoyo de un hombre de banda del Código galerías. Vamos chicos, tomaría un verdadero major event para que Microsoft elimine las funciones financieras de VB.

es una historia diferente para Microsoft.VisualBasic.Compatibility, que es exclusivamente para su uso por el asistente de actualización de VB6, EDITARahora ha estado marcada obsoleta en .Net 4 (mi predicción se hizo realidad), y no debe usarse para nuevos desarrollos. Habría algunas ventajas al eliminar referencias a esto, pero personalmente probablemente trataría de lograr un puerto que funcionara por completo haciendo referencia primero a .Net 3.5.

+3

De acuerdo 100% con esto. ¿De dónde viene esta reticencia a usar la biblioteca compatible de Microsoft? ¿Es solo la mentalidad de "ewwww ... dice VB"? WTF? Microsoft escribió VB6, C#, y luego proporcionó (de forma gratuita) el espacio de nombre Microsoft.VisualBasic para SOLO ESTE PROPÓSITO. Y todavía la gente duda en usarlo. Lo que sea: arriésguese con alguna otra opción de "no VB, por lo tanto, mejor". – JeffK

+1

Solo para agregar: al final del día, todo es IL. Puedo escribir cosas en C#, Visual Basic.NET, IronPython y Boo y lanzar todo en Blender (= compiladores) y recuperar IL que no sabe lo que era antes. –

+4

Existe un estigma en contra del uso de VB entre los desarrolladores de C# y porque tienen VisualBasic en el nombre que no les gusta porque piensan que están programando en VB. Quizás MS debería cambiarle el nombre a 'Microsoft.ReallyUsefulAndFullySupportedFunctions' y todos estarán felices –

1

Usted podría utilizar esta biblioteca que duplica las funciones de Excel en f #

Library

Tiene fotovoltaico que es el valor presente. Lo he usado una o dos veces Solo colócalo y agrega la referencia.

+1

hmmm parece un poco arriesgado confiar en un lenguaje CTP, pero creo que preferiría hacerlo que hacer referencia a la biblioteca Microsoft.VisualBasic – Dave

+0

Exactamente, cuando lo he usado, era para evitar la automatización de Excel y hacer referencia a Excel – Gratzy

+0

La versión "NotStandAlone" es de casi 1 meg ... casi tentada de enganchar la función PV de Reflector, pero le daré una oportunidad – Dave

3

bastante sencillo para replicarse en 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; 
    } 

Sólo una reorganización de la fórmula provides Microsoft.

+3

Es casi una reorganización de la fórmula de Microsoft, excepto cuando rate = 0. Es entonces cuando su versión se divide por cero, y VB6 y Microsoft.VisualBasic devuelven '-fv - (pmt * nper)'. Hay trampas incluso en la codificación de una fórmula de una página web. Esto refuerza mi respuesta, solo por lástima ** use Microsoft.VisualBasic ** y continúe implementando otra funcionalidad para los usuarios viejos y pobres. – MarkJ