明确一点,我想要指向指针的行为,这个问题的目的是生成干净、易读的代码。
我有一些代码,其中包含条件检查多个Dictionary.TryGetValue
调用的结果。如果能通过单个调用检索所有所需的对象,那么代码将更加清晰。因此,我想编写一个扩展来实现以下功能:
Dictionary<string, string> myDictionary; // Initialized somewhere
string x, y, z;
bool foundAllEntries = myDictionary.TryGetValues({"xvalue", out x}, {"yvalue", out y},
{"zvalue", out z});
if (foundAllEntries)
; // Do something with x, y, and z
然而,我无法想出一种将扩展方法引用传递给将保存输出的对象的方法。这似乎是非常基本的事情。
我该如何将对局部引用的引用存储在对象中?
请注意,此问题并不是要求使用替代方法来实现TryGetValues函数。 我可以用很多方法使这个“工作”,但没有一种方法能够生成像我尝试采取的方法一样干净的代码。
TryGetValues
的任何实现……对于它的签名,我不清楚你期望它是什么样子。(我可以想到一些替代方法可以工作,但你说你不想要那些方法,所以我只能说无论你做什么,你目前的代码都无法编译。) - Jon Skeetout
和ref
参数与引用类型一起使用,那么答案是肯定的。但我无法确定您正在尝试实现哪个方法签名,这使得很难确定您真正想要的是否得到了支持。先忘掉实现 - 确定下方法签名。 (个人建议使用方法链而不是单个调用,但嘿...) - Jon SkeetPair
中使用out
- 这是行不通的,因为out
不是类型本身的一部分,无法在类型参数中指定它。 (它是一个参数修饰符,而不是类型的一部分。)这肯定不会让我困扰 - 但正如我所说,我也不会尝试以这种方式解决问题。 - Jon Skeetif (dict.TryGetValues("xvalue", out x).And("yvalue", out y).And("zvalue", out z).AllFound)
的东西。 - Jon Skeetstring
。 - Patrick Hofman