2009-09-24 9 views
6

Ich arbeite an der Portierung einiger klassischer VB6-Code nach C# und stolperte gerade über eine Verwendung der PV Funktion.PV Funktion und Portierung VB6 zu C#

Ich fühle mich falsch, einen Verweis auf die Microsoft.VisualBasic Assembly enthalten. Ist das etwas, das üblicherweise gemacht wird, oder sollte ich weitere Optionen erkunden? Die nächste Idee, die mir in den Sinn kommt, ist die Erforschung dieser PV-Funktion in Reflector.

Antwort

10

Die Verwendung von Microsoft.VisualBasic von C# und VB.NET wurde gründlich unter this question diskutiert. Der Microsoft.VisualBasic-Namespace ist fully supported und wird ungefähr so ​​lange sein, wie .NET vorhanden ist. Es gibt keinen Grund, es zu vermeiden.

EDIT: Es ist zu sagen, dass die anderen Antworten auf diese Frage zum Zeitpunkt der Eingabe sind eine falsche Neuimplementierung der Funktion, und eine Ein-Mann-Band nicht unterstützte Bibliothek von-Code Galerien sehen. Komm schon Leute, es würde einen echten major event für Microsoft brauchen, um die finanziellen Funktionen von VB zu löschen.

Es ist eine andere Geschichte für Microsoft.VisualBasic.Compatibility, die durch die VB6 Upgrade-Assistenten ausschließlich für den Einsatz ist, EDITwird nun obsolet in .Net 4 (meine Vorhersage wahr) markiert worden ist, und sollte nicht für Neuentwicklungen verwendet werden. Es würde einige Vorteile geben, wenn man die Verweise darauf entfernt, aber persönlich würde ich wahrscheinlich versuchen, einen vollständig funktionierenden Port zu erhalten, der zuerst referenziert.Net 3.5.

+3

Stimmen Sie 100% damit überein. Woher kommt diese Abneigung, die von Microsoft unterstützte Bibliothek zu verwenden? Ist es nur die "Ewwww ... es sagt VB" Mentalität? WTF? Microsoft schrieb VB6, C# und stellte dann (kostenlos) den Microsoft.VisualBasic-Namespace für JUST THIS PURPOSE bereit. Und immer noch zögern Leute, es zu benutzen. Was auch immer - nimm deine Chance mit einer anderen "non-VB, also besser" -Option. – JeffK

+1

Nur hinzufügen: Am Ende des Tages ist alles IL. Ich kann Sachen in C#, Visual Basic.NET, IronPython und Boo schreiben und alles in den Blender (= Compiler) werfen und IL abrufen, die nicht weiß, was es vorher war. –

+4

Es gibt ein Stigma gegen die Verwendung von VB unter C# -Entwicklern und deshalb, weil VisualBasic im Namen sie nicht mag, weil sie denken, dass sie in VB programmieren. Vielleicht sollte MS dies in 'Microsoft.ReallyUsefulAndFullySupportedFunctions' umbenennen und alle werden glücklich sein –

1

Sie können diese Bibliothek verwenden, die Excel-Funktionen in f #

Library

dupliziert Es hat PV die Barwert ist. Ich habe es ein- oder zweimal benutzt. Einfach einwerfen und die Referenz hinzufügen.

+1

Hmmm scheint irgendwie riskant auf eine CTP-Sprache, aber ich denke, ich würde lieber tun, als die Microsoft.VisualBasic-Bibliothek Referenz – Dave

+0

Genau, wenn ich es verwendet habe, war es zu Excel-Automatisierung und Referenzierung zu vermeiden Excel – Gratzy

+0

"NotStandAlone" Version ist fast 1 Meg ... fast versucht, nur die PV-Funktion von Reflector, aber ich gebe dies eine Chance – Dave

3

ziemlich geradlinig replizieren 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; 
    } 

Nur eine Neuanordnung der Formel Microsoft provides.

+3

Es ist fast eine Neuordnung der Microsoft-Formel, außer wenn Rate = 0 ist. Das ist, wenn Ihre Version durch Null dividiert wird, und VB6 und Microsoft.VisualBasic geben '-fv - (pmt * nper)' zurück. Es gibt Fallstricke, selbst wenn man eine Formel auf einer Webseite programmiert. Dies verstärkt meine Antwort - um Himmels willen nur ** Microsoft.VisualBasic ** verwenden und weitermachen, um etwas andere Funktionalität für die armen alten Benutzer zu implementieren. – MarkJ