You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中Fluid类数组字段赋值引发原对象被修改的问题

Fluid对象数组字段按引用传递导致原数据意外覆盖

我定义了如下Fluid类用于存储流体数据,同时声明了Fluid_tbl As List(Of Fluid):

Public Class Fluid
    Public Index As Boolean            
    Public MassFlow As Double          
    Public Pres As Double              
    Public Temp As Double              
    Public comp(30) As Double           
    Public str As Double              
    Public Prop(10) As Double
End Class

当我基于一个Fluid对象给另一个对象赋值计算时,原对象的字段被意外覆盖。我希望所有字段都按值传递,但数组类型字段似乎是按引用传递?

比如在以下循环中,我想根据相对总流量将流MA的各分量缩放至流AP,但Fluid_Tbl(MA).comp(i)也被修改了:

For i = 0 To 30
     Fluid_tbl(AP).comp(i) = Fluid_Tbl(MA).comp(i) * Fluid_Tbl(AP).MassFlow / Fluid_Tbl(MA).MassFlow
Next i

补充说明

我的问题并非对象实例唯一,而是数组属性异常——MassFlow、Pres、Temp等值类型字段赋值正常。我定位到从Stack Overflow获取的CopyProperties方法:

Sub CopyProperties(CopyTo As Object, CopyFrom As Object)
    For Each Prop As System.Reflection.FieldInfo In CopyFrom.GetType().GetFields
        CopyTo.GetType().GetField(Prop.Name).SetValue(CopyTo, Prop.GetValue(CopyFrom))
    Next
End Sub

我原本希望该方法实现Fluid对象的字段值复制(直接赋值会导致引用指向同一对象),但调用此方法后,上述循环中的.comp(i)会按引用传递;不调用则按值传递,符合预期。

以下是简化复现代码:

Private Sub Example()
       
   Fluid_Tbl = New List(Of Fluid)
   For i = 0 To 1
       Dim fld As New Fluid
       Fluid_Tbl.Add(fld)
   Next

   Dim MA, AP As Integer
   MA = 0
   AP = 1

   Fluid_tbl(MA).comp(0) = 100
   Fluid_tbl(MA).comp(1) = 50
   Fluid_tbl(MA).MassFlow = 100

   Fluid_tbl(AP).MassFlow = 200

   CopyProperties(Fluid_tbl(AP), Fluid_tbl(MA))
   Fluid_tbl(AP).MassFlow = 0

   If Fluid_tbl(MA).MassFlow > 0 Then
       For i = 0 To 30
           Fluid_tbl(AP).comp(i) = Fluid_tbl(MA).comp(i) * Fluid_tbl(AP).MassFlow / Fluid_tbl(MA).MassFlow
       Next i
   End If
End Sub

内容的提问来源于stack exchange,提问作者Tarluna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:12:31