gpt4 book ai didi

c# - SAFE Pointer to a pointer (well reference to a reference) 在 C# 中

转载 作者:行者123 更新时间:2023-11-30 14:44:31 25 4
gpt4 key购买 nike

在我正在处理的 C# 应用程序中,我有一个非常长的标识符,如下所示:-

foo.bar.bwah.blah.whatever.very.very.huge

每当我引用这个对象时,这绝对是一场噩梦,不幸的是我确实需要引用它很多:-

var something = foo.bar.bwah.blah.whatever.very.very.huge.a;
var somethingElse = foo.bar.bwah.blah.whatever.very.very.huge.b;
foo.bar.bwah.blah.whatever.very.very.huge.c = 12;

等等

我想使用某种更小的别名来更新此代码,但问题是我想更改基础引用,并同时更新别名而不显式更新别名

目前,如果我执行以下操作:-

foo.bar.bwah.blah.whatever.very.very.huge.a = "hello";
string shorter = foo.bar.bwah.blah.whatever.very.very.huge.a;
foo.bar.bwah.blah.whatever.very.very.huge.a = "world";
Console.WriteLine(shorter);

它会输出“你好”。我想要实现的是以下内容:-

foo.bar.bwah.blah.whatever.very.very.huge.a = "hello";
string** shorterPointer = &foo.bar.bwah.blah.whatever.very.very.huge.a;
foo.bar.bwah.blah.whatever.very.very.huge.a = "world";
Console.WriteLine(**shorter);

这将根据需要输出“world”。

我相信您可以在 C# 中使用不安全代码实现类似的目的,但是我不能那样做,我必须只使用安全代码。

有人知道我如何实现这一点吗?

请注意:这个问题不是关于字符串是不可变的,我知道它们是 - 事实上我假设它们是为了问题的目的。如果我使用其他类型可能会更简单...所以当我将“hello”分配给 a 然后将“world”分配给 a 时,我每次都实例化不同的对象,因此我存储了引用重新分配后,a 将失效。

最佳答案

一个解决办法是使用一个或一对 lambda。

例如:

Func<string> getter = () => blah_de_blah;
Action<string> setter = x => blah_de_blah = x;

现在,您可以使用getter 和setter 来读写长标识符。

但是,由于您的点是成员访问器,因此最简单的方法是引用直接父级,如下所示:

var myHuge = foo.bar.bwah.blah.whatever.very.very.huge;
// now access myHuge.a everywhere

这在任何情况下都是好的做法,因为像这样的长点表达式违反了 Law of Demeter ,这抑制了代码库的灵 active ——它在太多地方需要太多信息。

关于c# - SAFE Pointer to a pointer (well reference to a reference) 在 C# 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/320436/

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