Pomocí LINQ pro přístup k Vlastnosti objektů do jiného objektu

hlasů
0

Musím se dostat na hodnoty z objektu v rámci jiného objektu. Můj problém je, že nemůže získat přístup k libovolné hodnoty zevnitř podobjektu, vždycky jsem si hodnotu objektu typu sama.

Směrovací číslo, kde já jsem přístup k objektu

var test = scheduledTask.Fields.Select(x => x.FieldValue);

To přivádí zpět v zobrazení výsledků

[0] 10111
[1] {ObjectType.Extension} 

Musím přístup k [1], prvek, který obsahuje následující vlastnosti (mimo jiné), a i třeba pro přístup k DisplayName

{
DisplayName: MainMenu,
CategoryId: -1,
Id: 433
}

ScheduledTask je

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}
Položena 03/12/2019 v 00:03
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Za předpokladu, že x.FieldValueje objectmůžete zkusit odlévání zkontrolovat, zda je typu ObjectType.Extension:

var test = scheduledTask.Fields.Select(x => {
   var asExtension = x.FieldValue as ObjectType.Extension;
   if(asExtension != null) return asExtension.DisplayName;
   else return x.FieldValue;
});

ETA: The asoperátor je jakousi bezpečného-obsazení, které vrátí hodnotu NULL, pokud je typ runtime LHS tvrzení neodpovídá statického typu identifikovanou argumentem RHS.

Odpovězeno 03/12/2019 v 00:07
zdroj uživatelem

hlasů
2

Nemusíte LINQ pro přístup k určitému index pole.

string name = (scheduledTask.Fields[1].FieldValue as ObjectType.Extension)?.DisplayName;

Vzhledem k tomu, pole obsahuje hodnoty různých typů Domnívám se, že máme řadu object. Proto musíme obsazení k očekávanému typu, aby bylo možné specifických oblastech přístupových nebo vlastnosti.

V případě, že hodnota je null nebo typ neodpovídá asse získá null. Provozovatelé null-podmíněné ?.provádí člen nebo přístupový prvek operace se pouze tehdy, když se k operandu nenulovou hodnotu a jinak návrat null.

Pokud si nevíte, index na požadovanou hodnotu, můžete se dotazovat se

string name = (scheduledTask.Fields
    .Select(x => x.FieldValue)
    .OfType<ObjectType.Extension>()
    .FirstOrDefault()
)?.DisplayName;

Pokud si nejste jisti, že požadovaná hodnota je tam a ne null, můžete přetáhnout ?.

Odpovězeno 03/12/2019 v 00:11
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more