繁体   English   中英

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

[英]How to make use of reference to a variable in c#

我想缩短表达式

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

this.GdkWindow.GetPosition(refRect1.X, refRect1.Y)使用对ConfigurationService.ApplicationSettings.rect1变量的引用。

在 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# 完全失望!

这应该可行,假设rect1的类型是Rect (不喜欢var关键字,但每个人都喜欢):

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

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

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

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

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

然后像SQLALIAS.ClassName一样使用它。 至于第二个问题,要在 .NET 中使用指针,您需要在unsafe的上下文中使用它们并在选中“允许不安全代码”选项的情况下构建项目,尽管我不确定它是如何工作的,或者即使它会在 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.rect1 时都会生成 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);

要制作变量,您需要知道两种类型的变量。

  1. 一个类似于 1, 2, 3... 的 int
  2. 一个像 1.2 1.3 1.4 ...

请注意,int 不能是 double,但 double 可以是 int。

要使用它们,请使用这些代码行作为示例

int test = 4 双重测试 = 4.2

我希望这有助于了解变量,我希望它是您问题的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM