C# Reflection - changing the value of a field of a variable

后端 未结 3 428
轮回少年
轮回少年 2021-01-01 01:40

I have an instance of a class, I want to change an object data member of this instance only with another object of the same type (swap), due to my system c

3条回答
  •  鱼传尺愫
    2021-01-01 02:09

    in vb with generics, but rudimentary error handling:

    Module somereflectionops
        Function GetFieldValue(Of OBTYPE, FIELDTYPE)(instance As OBTYPE, fieldname As String,  Optional specbindingflags As BindingFlags = BindingFlags.NonPublic Or BindingFlags.Instance) As FIELDTYPE
            Dim ot As Type = GetType(OBTYPE)
            Dim fi As FieldInfo
            Try
                fi = ot.GetField(fieldname, BindingFlags.Default Or specbindingflags)
                If fi Is Nothing Then Return Nothing
                Return fi.GetValue(instance)
            Catch ex As Exception
                Return Nothing
            End Try
        End Function
    
        Function SetFieldValue(Of OBTYPE, FIELDTYPE)(instance As OBTYPE, fieldname As String, value As FIELDTYPE, Optional specbindingflags As BindingFlags = BindingFlags.NonPublic Or BindingFlags.Instance) As Boolean
            Dim ot As Type = GetType(OBTYPE)
            Dim fi As FieldInfo
            Try
                fi = ot.GetField(fieldname,  BindingFlags.Default Or specbindingflags)
                If fi Is Nothing Then Return false
                fi.SetValue(instance, value)
                Return True
            Catch ex As Exception
                Return False
            End Try
        End Function
    End Module
    

    use: SetFieldValue(Of cartonclass, Integer)(cartonyoudropped, "survivingeggcount", 3)

提交回复
热议问题