0

Propertyタイプが のグローバル変数に値を代入しようとしていますDouble。これPropertyは as として渡されObject、代入は失敗します。

以下のコード例では、値は実際のオブジェクトに割り当てられることはなく、ローカルでのみ割り当てられます。

Public Class Form1
    Friend Home As New Building

    Private Sub AssignValues() Handles Me.Load
        'Objects of different types are added to a list
        Dim listObjects As New List(Of Object)
        listObjects.Add(Home.Surface)

        'All the Objects in listObjects are assigned a value that
        'is stored as String
        For Each o As Object In listObjects
            SetProperty(o, "45.6")
            Debug.Print("Surface = " & Home.Surface.ToString)
        Next
    End Sub

    Private Sub SetProperty(ByRef Variable As Object, ByVal Value As String)
        Select Case Variable.GetType
            Case GetType(Double)
                Variable = CDbl(Value)
            Case Else
                '...
        End Select
    End Sub
End Class

Public Class Building
    Dim _surface As Double = 0
    Public Property Surface As Double
        Get
            Return _surface
        End Get
        Set(ByVal value As Double)
            _surface = value
        End Set
    End Property
End Class

プログラムは常に のSurface = 0代わりに出力します45.6。私は何を間違っていますか?

ここVariableで提案されているように、参照として渡そうとしましたが、成功しませんでした。Reflection の使用についても読みましたが、それよりも簡単なものがあるはずです...

4

2 に答える 2

2

リストに home.surface を追加するときは、ダブルのコピーをリストに追加してから、そのコピーを調整します。「o」に時計を置いて、home.surface が同じままで、それがどのように変化するかを確認します。

リフレクションを使用したい場合は、これらの線に沿って何かを試してください。

Dim prop As Reflection.PropertyInfo = o.GetType().GetProperty("Surface")
prop.SetValue(o, 45.6)
于 2013-07-03T11:36:15.830 に答える