【发布时间】:2017-05-10 11:13:31
【问题描述】:
在学习 c# 7 时,我偶然发现了 Ref return。我了解到,下面的 GetSingle 方法有效,它返回给我一个外部参考。但是 GetIns 方法让我抛出编译时错误。不幸的是,我无法确定这些 GetIns 与 GetSingle 有何不同以及有何不同。谁能解释一下?
错误:无法在此上下文中使用表达式,因为它可能不会通过引用返回。
请注意,其中一条评论建议将此作为重复。但是那个问题是集合的类型,这特别是在集合成员和类型中的属性之间。因此,我认为这是一个不同的问题
class Pro
{
static void Main()
{
var x = GetSingle(new int[] { 1, 2 });
Console.WriteLine(x);
}
static ref int GetSingle(int[] collection)
{
if (collection.Length > 0) return ref collection[0];
throw new IndexOutOfRangeException("Collection Parameter!");
}
static ref int GetIns(Shape s)
{
if (s.Area <= 0)
{
s.Area = 200;
return ref s.Area;
}
return ref s.Area;
}
struct Shape {public int Area{ get; set; }
}
【问题讨论】:
-
您不能获取属性的
ref。Shape.Area是一个属性。如果您尝试将属性传递给接受ref/out参数的方法(如int.TryParse("123", out s.Area)),也会发生同样的情况。 -
@DavidG,谢谢
-
Hence I see this as a different question- 这不是另一个问题的措辞相同,而是另一个问题的答案也完全回答了你的问题。因此它是重复的。 -
请不要将您的问题作为重复关闭视为一件坏事。这仍然是一个有用的问题,因为它提出了一个略有不同的问题,它只是另一个问题的答案也涵盖了这个问题。有人在 SO 上搜索有关 ref 返回的详细信息,然后可能会找到您的并被定向到另一个问题以获得更多答案。