C#7を習得しているうちに、の返信が返ってくる。 GetSingleメソッドは、私が学んだように動作します。しかし、GetInsメソッドは、コンパイル時エラーで私をスローします。 Unfortnately、私がいないワークアウトなぜ、どのようにこれらのGetInsできGetSingle異なります。誰かが私を説明できますか?C#7プロパティのRefリターンがコンパイルされない
エラー:この文脈では、参照として返されない可能性があるため、式は使用できません。
コメントの1つは、重複としてこれを提案していたことに注意してください。しかし、その質問はコレクションのタイプであり、これは具体的にはコレクションのメンバーとタイプのプロパティの間にありました。したがって、私は、これはShapeが財産エリアではなく公共のint型フィールドメンバを持っているため、この問題が発生した別の質問
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はプロパティです。あなたはint.TryParse 'のように(' ref'/'out'パラメータを受け取るメソッド(「123」、s.Areaアウト)'にプロパティを渡すしようと同じことが起こります。 – xanatos
[あなただけのレフリーを返すことができます「安全に戻る」:あなたに渡されたもの、およびオブジェクトのフィールドを指すもの。](https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in 。-csharp-7-0 /)だから、フィールドではなく、プロパティを返すことができ – DavidG
@DavidG、ありがとう – Nair