Jag får felet : om du ska skicka något som ref så måste det vara en variabel. Vilket jag redan konstaterat i mitt inlägg. Frågan var VARFÖR denna begränsning införts, indexeraren returnerar ju ändå samma object som variablen innehåller. Jag söker en teknisk förklaring till varför det måste vara så. en property/indexer är ju en metod (i msil) Now we're talking, det var den förklaringen jag var ute efter :-)Skicka indexerare eller property som referens
C:\SoftPlan.Net\Source\Current\SoftPlan\Settings\frmSeverities.cs(451): A property or indexer may not be passed as an out or ref parameter
med följande kod :
<code>
frmEditSeverity mForm=new frmEditSeverity(mData,ref mData.Severity[(int)mItem.Tag]);
</code>
Men om jag i stället skriver på följande vis :
<code>
DataSets.DataSeverity.SeverityRow mRow=mData.Severity[(int)mItem.Tag];
frmEditSeverity mForm=new frmEditSeverity(mData,ref mRow);
</code>
så fungerar det. Någon som kan se en rimlig förklaring till detta beteende? Det är ju i slutänden samma objekt som skickas. Borde man inte tillåta båda sätten, eller finns det någon kompilatorteknisk förklaring?Sv: Skicka indexerare eller property som referens
inte ett värde ur en property.. (tex din indexerare)
<code>
SomeDataType tmp=mData.Severity[(int)mItem.Tag];
frmEditSeverity mForm=new frmEditSeverity(mData,ref tmp);
mData.Severity[(int)mItem.Tag]=tmp;
</code>
//RogerSv: Skicka indexerare eller property som referens
Sv: Skicka indexerare eller property som referens
get_MyProperty();
skickar du något som "ref" så betyder du att du vill kunna peka om <b>variabeln</b> du skickar.
att försöka skicka en property som ref är alltså samma sak som att försöka skicka resultatet av en metod som ref.
MyMethod(ref SomeFunction());
i detta fallet så har vi ju ingen variabel utan bara ett resultat , och vi kan därmed inte peka om variabeln eftersom den inte finns...
det är alltså inte värdet som ändras utan variabeln som pekar på värdet , och om du har en property eller funktion så har vi som sagt bara värdet och inte någon variabel som pekar på det...
(ok , vm i dålig pedagogik)
//RogerSv: Skicka indexerare eller property som referens
en property/indexer är ju en metod (i msil)
get_MyProperty();
skickar du något som "ref" så betyder du att du vill kunna peka om <b>variabeln</b> du skickar.
att försöka skicka en property som ref är alltså samma sak som att försöka skicka resultatet av en metod som ref.
MyMethod(ref SomeFunction());
i detta fallet så har vi ju ingen variabel utan bara ett resultat , och vi kan därmed inte peka om variabeln eftersom den inte finns...
det är alltså inte värdet som ändras utan variabeln som pekar på värdet , och om du har en property eller funktion så har vi som sagt bara värdet och inte någon variabel som pekar på det...
(ok , vm i dålig pedagogik)
//RogerSv: Skicka indexerare eller property som referens