2011-06-23 11 views
1

私は例のどこか私のプログラムでVB .NET - 二重引用符の配列を作成するにはどうすればよいですか?

Dim Area as Double = 0 
Dim Perimeter as Double = 0 

私は、これらの値を計算するために言って、私のプログラムでタイプダブル変数の束を持っているので、私はプログラムで

Public Sub TheSquare(ByRef TheArea as Double, ByRef ThePerim as Double, ByVal TheSide as Double) 
    TheArea = TheSide^2 
    ThePerim = 4 * TheSide 
End Sub 

とどこかで定義します私は辺の長さを集めて、面積と周囲を計算しています。たとえば、

While True 
    S = GetSideValueFromSomewhere() 
    TheSquare(Area, Perimeter, S) 
End 

私の実際のプログラムでは、私は計算したい20の量を持っています。明らかにそれぞれには異なる方程式があります。しかし、最終的に私はタイピングを節約するために、私はこのように、大量の配列を作成し、ファイルへの出力のすべての20にしたい:

Dim TypingSaver() as Double = {Area, Perimeter} 

ので、私は3行のファイルに値をダンプすることができ20の変数名をコピーして貼り付けるのではなく、for-loopを使用します。

これは、AreaやPerimeterがObjectのような参照型であった場合に、これが欲しいものです。しかし、Doublesであるため、TypingSaverには実際の変数への参照ではなく、値のみが含まれます。だから私は私のTheSquare関数を使用した後、AreaとPerimeterの値は正しく更新されますが、TypingSaverは配列を宣言したときのAreaとPerimeterの値が何であれ保持します。

VB.NETでdouble型への参照の配列を作成するにはどうすればいいですか?

答えて

3

配列を作成するとすぐに配列にすべての変数がコピーされ、変数で行っている変更は配列変数に反映されないため、これを行うことはできません。でる)。

プロパティ(getおよびset)としてすべての変数(20変数名)を含む別のクラスを作成し、すべての変数のリストを返すToStringメソッドをオーバーライドすることをお勧めします。したがって、これらの変数をダンプする必要があるときは、ToString()メソッドを呼び出すと、すべてのパラメータの現在の値が返されます。

0

これを行うには厄介な方法があります。すべての数値型は値型ですが、配列は参照型です。だから私はこのように、double型の配列にすべての私のダブルスを変更することができます。

Dim Area(0) as Double 
Dim Perimeter(0) as Double 

は、だから今の面積と周囲は、二重の1要素の配列です。私の「ループ配列」は、

Dim TypingSaver() as Array = {Area, Perimeter} 

になりました。TypingSaverは、AreaとPerimeterへの参照を格納します。私はTypingSaverのためのタイプを変更し、ダブル宣言に置き換える検索と可能性があるため、私にとっては、これは簡単な変化であった、2つの他の場所で、私は、このフォームの直接アクセスに変更する必要がありました:

TypingSaver(1) = 7 

TypingSaver(1).SetValue(7, 0) 

しかし、それは私が互いに関連する他のオブジェクトのために他の "ループ配列"を持っていることで私のコードの一貫性を保ちます。

本当の解決策はすべてをリストアするのではなく、必要なすべてのオブジェクトを持つクラスを作成して配列の中に格納するのではなく、その1つの配列を作成することです。ブレイズデン。

+1

はイエス、あなたがこの方法を行うことができますが、それはあなたが7つのまたは1の手段であるのか分からないので、読み取れません。プロパティを持つ別のクラスを持つと、Shape.Area、Shape.Perimeterのようなものになるので、エラーが発生しにくく、読みやすくなります。 –

0

単一要素アレイの考え方は実際にはひどいものでした。コードは恐ろしく遅くなった。このようなラッパークラスを作成します:

Public Class DoubleWrapper 
    Public Value As Double 
End Class

DoubleWrappersの配列が作成されたとき、それは当然の参照、によるであろう友人の周りに別の仕事が提案があります。

これは理想的ではないことを理解していますが、コードを最初から書き直す時間が来るまで、私が探していたのは回避策でした。

+0

このクラスは[Nullable(Of Double)](http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx)と呼ばれます。 – Neolisk

0

あなたの最新の回答とよく似ていますが、あなたの型をNullableとしてラップしたいと思うでしょう。これは基本的にヌルでもよいオブジェクトですが、参照型にもなります。

e。 Dim testDouble as Nullable(Of Double)またはDim testDouble2 as Double?

参照:

関連する問題