Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
属性的C#7 Ref返回不';不编译_C#_C# 7.0 - Fatal编程技术网

属性的C#7 Ref返回不';不编译

属性的C#7 Ref返回不';不编译,c#,c#-7.0,C#,C# 7.0,在学习c#7时,我碰巧遇到了Ref返回。下面的GetSingle方法按照我所了解的那样工作,它返回外部引用。但是GetIns方法使我产生了一个编译时错误。不幸的是,我无法解释这些GetIn与GetSingle的不同之处。有人能给我解释一下吗 错误:表达式不能在此上下文中使用,因为它可能无法通过引用返回。 请注意,其中一条评论建议将此作为副本。但那个问题是集合的类型,这是集合的成员和类型中的属性之间的问题。因此,我认为这是一个不同的问题 class-Pro { 静态void Main() { va

在学习c#7时,我碰巧遇到了Ref返回。下面的GetSingle方法按照我所了解的那样工作,它返回外部引用。但是GetIns方法使我产生了一个编译时错误。不幸的是,我无法解释这些GetIn与GetSingle的不同之处。有人能给我解释一下吗

错误:表达式不能在此上下文中使用,因为它可能无法通过引用返回。

请注意,其中一条评论建议将此作为副本。但那个问题是集合的类型,这是集合的成员和类型中的属性之间的问题。因此,我认为这是一个不同的问题

class-Pro
{
静态void Main()
{
var x=GetSingle(新的int[]{1,2});
控制台写入线(x);
}
静态引用int GetSingle(int[]集合)
{
如果(collection.Length>0)返回ref collection[0];
抛出新的IndexOutOfRangeException(“集合参数!”);
}
静态ref int GetIns(形状s)
{

如果(s.Area发生这种情况是因为形状有一个属性区域而不是公共int字段成员。您不能返回对属性的引用

这不会编译:

class Shape
{
  private int mArea;

  public int Area => mArea;
}

static ref int GetIns(Shape s)
{
  if (s.Area <= 0)
  {
    s.Area = 200;
    return ref s.Area;
  }
  return ref s.Area;
}
类形状
{
马雷亚私人酒店;
公共国际区=>mArea;
}
静态ref int GetIns(形状s)
{

if(s.Area)您不能接受属性的
ref
Shape.Area
是一个属性。如果您尝试将属性传递给接受
ref
/
out
参数(如
int.TryParse(“123”,out s.Area)的方法,也会发生同样的情况
。所以你可以返回一个字段,而不是一个属性。@DavidG,谢谢你
,因此我认为这是一个不同的问题
-这不是关于另一个问题的措辞相同,而是关于另一个问题的答案也完全回答了你的问题。因此它是重复的。请不要看到你的问题被关闭重复是一件坏事。这仍然是一个有用的问题,因为它提出了一个稍微不同的问题,它只是另一个问题的答案也涵盖了这个问题。搜索ref返回详细信息的人可能会找到你的,并被引导到另一个问题以获得更多答案。根据文档,你认为正确。但你正在实现ed Shape作为引用类型,它首先是值类型。这是必须重新实现的,以达到所需的结果吗?您知道struct如何实现同样的结果吗?
class Shape
{
  private int mArea;

  public int Area => mArea;
}

static ref int GetIns(Shape s)
{
  if (s.Area <= 0)
  {
    s.Area = 200;
    return ref s.Area;
  }
  return ref s.Area;
}
class Shape
{
  public int Area;
}

static ref int GetIns(Shape s)
{
  if (s.Area <= 0)
  {
    s.Area = 200;
    return ref s.Area;
  }
  return ref s.Area;
}