C# Error
CS8170 – Struct members cannot return ‘this’ or other instance members by reference
Reason for the Error & Solution
Struct members cannot return ‘this’ or other instance members by reference
Example
The following sample generates CS8170:
Value types (i.e. struct
s), are most commonly allocated on the stack. A value type allocated on the stack becomes invalid leaving the scope in which it was declared. The compiler avoids a reference to a variable that becomes invalid leaving the scope by generating this error.
// CS8170.cs (8,14)
struct Program
{
public int d;
public ref int M()
{
return ref d;
}
}
public class Other
{
public void Method()
{
var p = new Program();
var d = p.M();
}
}
To correct this error
Changing the method to not ref
-return corrects this error:
delegate void D();
struct Program
{
public event D d;
public D M()
{
return d;
}
}
If a reference to a member is required, consider extending the scope of the value. For example:
public struct Program
{
public int d;
}
public static class Extensions
{
public static ref readonly int RefD(this in Program program)
{
return ref program.d;
}
}
public class Other
{
public void Method()
{
var p = new Program();
var d = p.RefD();
}
}