如何在c#中使用对变量的引用

本文关键字:变量 引用 | 更新日期: 2023-09-27 18:19:25

我想缩短这样的表达式

this.GdkWindow.GetPosition(ConfigurationService.ApplicationSettings.rect1.X,
                           ConfigurationService.ApplicationSettings.rect1.Y);

使用对CCD_ 2变量的引用将CCD_。

在C++中,我能够使用对对象(或变量)的引用,如下所示:

Rect& refRect1 = very.very2.very3.long_variable.rect1;
GetPosition(refRect1.x, refRect1.y);

我如何在C#中实现相同的功能?

我如何像下面的C++代码那样引用int变量:

int A = 5;
int& B = A;
B = 12;

更新:GetPosition方法被声明为void GetPosition(out int x, out int y)。该方法用一些数据填充ConfigurationService.ApplicationSettings.rect1结构。这就是为什么我想使用一个参考。

我知道我可以做一些类似的事情:

    var rect = new Gdk.Rectangle();
    this.GdkWindow.GetPosition(out rect.X, out rect.Y);
    this.GdkWindow.GetSize(out rect.Width, out rect.Height);
    ConfigurationService.ApplicationSettings.rect1 = rect;

但是有没有办法避免使用临时变量呢?C#是否缺少PHP所具备的功能?对C#绝对失望!

如何在c#中使用对变量的引用

假设rect1的类型是Rectvar关键字不受欢迎,但每个人都喜欢),这应该有效:

Rect r = ConfigurationService.ApplicationSettings.rect1;
this.GdkWindow.GetPosition(r.X,
                           r.Y);

实际上,这将创建结构的副本,但我们应该关心吗?由于您只想读取字段,因此可以使用副本。

(注意,我不确定它是否是副本)

这些都是嵌套属性,所以不能缩短它们,除非先将它们存储在变量中。对于长名称空间,您可以执行类似的操作

using System.Data.Long.Namespace.Here.SqlClient = SQLALIAS;

然后像this.GdkWindow.GetPosition(refRect1.X, refRect1.Y)0一样使用它。至于第二个问题,要在.NET中使用指针,您需要在unsafe上下文中使用它们,并在选中"允许不安全代码"选项的情况下构建项目,尽管我不确定这是如何工作的,甚至不确定它是否会在Mono下编译,我认为您使用Mono是因为GdkWindow

unsafe
{
    int A = 5;
    int* B = &A;
}

更新的后续行动:

你必须这样调用GetPosition。

int x, y;
GetPosition(out x, out y);

正如编译器所说的A property, indexer or dynamic member access may not be passed as an out or ref parameter

我认为没有办法使用临时变量,因为每次访问ConfigurationService.ApplicationSettings.rrect1时,都会生成Rect对象的副本。

如果Rect.X和Rect.Y是公共字段,则可以执行以下操作:

Rect r;
this.GdkWindow.GetPosition(out r.X, out r.Y);
ConfigurationService.ApplicationSettings.rect1 = r;

如果它们是属性,您将需要:

int x, y;
this.GdkWindow.GetPosition(out x, out y);
ConfigurationService.ApplicationSettings.rect1 = new Rect(x, y);