投稿者 トマト  (小学生) 投稿日時 2009/8/28 03:08:32
今、GetGCDを改良してみました。
        Public Function GetGCD(ByVal Int1 As IntegerByVal Int2 As IntegerAs Integer
            '小さいほうを探す 
            Dim Mini As Integer = Math.Min(Int1, Int2)

            Dim Int1_List As New List(Of Integer)
            Dim OKList As New List(Of Integer)
            Dim inting As Double
            'Int1を確認 
            For i As Integer = 1 To Mini
                inting = Int1 / i
                If Not IsDecimal(inting) Then
                    Int1_List.Add(i)
                End If
            Next
            'Int2を確認 
            For i As Integer = 1 To Mini
                inting = Int2 / i
                If Not IsDecimal(inting) AndAlso Int1_List.Contains(i) Then 'ここを改良しました。 
                    OKList.Add(i)
                End If
            Next
            Return OKList(OKList.Count - 1)
        End Function

結果は失敗です。
というよりも変な現象が起きました。

テスト用コード
    Sub Main()
        Application.EnableVisualStyles()
        Dim f As New Fraction(5, 87)
        MsgBox(f.ToDouble)
    End Sub

これを実行すると、GetGCDの"If Not IsDecimal(inting) Then"の行で呼び出しているIsDecimalの "For Each c As Char In Nomber.ToString"の行で発生しました。

でも変です。
ToDoubleではReduceは呼び出さないはずです。

IsDecimalのローカル
IsDecimal False
Nomber    1.25


もっと探ってみました。
すると、Denominatorという分母のプロパティのSetの中のReduce()の背景の色が変わっていました。
どこからも呼び出していないのに・・・。不思議です。