Kompilatorfel CS8170
Struct-medlemmar kan inte returnera "detta" eller andra instansmedlemmar med referens
Följande exempel genererar CS8170:
Värdetyper (dvs. struct
s) allokeras oftast i stacken. En värdetyp som allokerats i stacken blir ogiltig och lämnar omfånget där den deklarerades. Kompilatorn undviker en referens till en variabel som blir ogiltig och lämnar omfånget genom att generera det här felet.
// 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();
}
}
Om du ändrar metoden till inte ref
-return korrigeras det här felet:
delegate void D();
struct Program
{
public event D d;
public D M()
{
return d;
}
}
Om en referens till en medlem krävs kan du överväga att utöka värdets omfång. Till exempel:
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();
}
}
Feedback om .NET
.NET är ett öppen källkod projekt. Välj en länk för att ge feedback: