Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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: