gpt4 book ai didi

c# - 动态结构失败

转载 作者:行者123 更新时间:2023-11-30 18:07:09 27 4
gpt4 key购买 nike

我在使用由结构构成的类时遇到问题。

基本定义如下:

using System;

struct Real
{
public double real;

public Real(double real)
{
this.real = real;
}
}

class Record
{
public Real r;
public Record(double r)
{
this.r = new Real(r);
}
public void Test(double origval, double newval)
{
if (this.r.real == newval)
Console.WriteLine("r = newval-test passed\n");
else if (this.r.real == origval)
Console.WriteLine("r = origval-test failed\n");
else
Console.WriteLine("r = neither-test failed\n");
}
}

当我创建一个非动态(静态?)记录时,设置 Real 有效。
当我创建动态记录时,设置 real 不起作用。
当我创建动态 Record 时,替换了真实的作品。

这是测试程序

class Program
{
static void Main(string[] args)
{
double origval = 8.0;
double newval = 5.0;

// THIS WORKS - create fixed type Record, print, change value, print
Record record1 = new Record(origval);
record1.r.real = newval; // change value ***
record1.Test(origval, newval);

// THIS DOESN'T WORK. change value is not making any change!
dynamic dynrecord2 = new Record(origval);
dynrecord2.r.real = newval; // change value
dynrecord2.Test(origval, newval);

// THIS WORKS - create dynamic type Record, print, change value, print
dynamic dynrecord3 = new Record(origval);
dynamic r = dynrecord3.r; // copy out value
r.real = newval; // change copy
dynrecord3.r = r; // copy in modified value
dynrecord3.Test(origval, newval);

}
}

这是输出:r = newval-测试通过r = 原始测试失败r = newval-测试通过

当我将 struct Real 更改为 class Real 时,所有三种情况都有效。

这是怎么回事?
谢谢,
最大

最佳答案

就核心 CLI 而言,

dynamic 确实是 object 的奇特词,因此您正在改变盒装副本。这很容易让人发疯。 首先 改变结构确实非常容易出错。我只想让结构不可变 - 否则你会一遍又一遍

关于c# - 动态结构失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4201692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com