【问题标题】:Changing a value from reference?从参考更改值?
【发布时间】:2014-07-03 00:12:04
【问题描述】:

我正在尝试通过引用来更新图片。我知道问题出在哪里,但我很好奇是否可以在 C# 中执行类似的操作。

我正在制作一个系统,人们可以在其中与图片进行对话,并在调用图片的异步加载时加载“加载”图像(因为它可能很大并且需要一点时间来加载)。所有这些都有效,我只是好奇我是否可以使用图片的变量来更新图片,或者我是否应该引用对象(因为对象可能是三个不同的对象之一,具体取决于用户的位置是,但它总是引用图片)。

这是我试图尽可能清楚地命名的所有伪代码。

Class AsyncLoad()
{
Picture pic;
string location;

void AsyncLoadStart(string picLocation, Picture picRef)
{
    pic = picRef;
    location = picLocation;
    AsyncLoad();
}

void AsyncLoad()
{

    pic = picRef;
    Picture picLoading = PictureFromFile(picLocation);
    while (picLoading.IsLoad)
        Wait();
    pic = picLoading; //issue is here
}
}

问题在于简单地丢弃旧图片的位置,并使图片引用图片加载。我只是好奇是否有一种方法可以在不参考图片附加到的对象的情况下做我想做的事。

澄清:我在将 picLoading 分配给 pic 时尝试更新 picRef。我假设我必须保存对 picRef 分配给的对象的引用,并直接更新 picRef。我只是好奇是否有另一种方法,例如如果不是异步的 ref 关键字将如何工作。

编辑 2:我使用这些图形的程序迫使我使用 2 种单独的方法来加载,正如我在上面阐明的那样 - 否则我只会使用 ref 关键字。我更新了伪代码以表明这一点(这是一个不允许我直接运行异步代码的游戏环境,而是来自下一帧发生的更新调用)。如果我可以将 ref 放在图片上会很容易。

【问题讨论】:

  • 我不确定我是否理解。你能改写整件事吗?它与passbyvalue/passbyreference有关吗?那种东西?
  • 当然它会丢弃旧值,您将其分配给新值!我也不明白这个问题。
  • 带编辑的评论:我正在尝试让 pic = picLoading 在完成加载时更新 picRef。我正在寻找是否有办法做到这一点,而无需引用 picRef 附加到的对象并直接从对象更新图片。我假设我必须引用 picRef 的对象,但我想看看是否有办法不这样做。尽量说清楚,如果不是很抱歉。
  • 在 picRef 参数之前尝试 ref 关键字。
  • 异步加载器的工作方式(我没有正确引用这个),需要引用外部存储的图片。我应该写它,以便 asyncloaderstart 也标记另一个方法(asyncLoader),它实际上将 picLoading 加载到 pic 中。无论哪种方式,我只是假设这是一个不可能的问题,并且已经更新了我的代码以使用该对象。

标签: c# variables asynchronous reference loading


【解决方案1】:

如果您的目标是分配给原始参数,这似乎是基于您的代码 sn-p 的情况,那么您应该在声明中使用 ref 关键字。

void AsyncLoadStart(string picLocation, ref Picture picRef)

【讨论】:

  • 我会把这个作为答案,因为它对 3/4 的人来说已经足够好了。我真正想要的是指针,直到我写完所有这些并去“杜尔”之后才考虑它们。没有先用 C++ 编程,也没有首先考虑指针的问题,我猜 ^.^ Ref 几乎适用于其他所有人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
相关资源
最近更新 更多