Gebruik Linq een met objecten plaats In andere doelstelling

stemmen
0

Ik moet een waarde van een object te krijgen binnen een ander object. Mijn probleem is dat ik kan geen waarden toegang vanuit de subobject, krijg ik altijd de waarde van het type object zelf.

Code waar ik toegang tot het object

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

Dit komt terug in de resultaten bekijk

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

Ik moet toegang tot [1] element dat de volgende eigenschappen bevat (onder andere), en ik moet om het DisplayName

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

ScheduledTask is

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}
De vraag is gesteld op 03/12/2019 om 00:03
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Ervan uitgaande dat x.FieldValueis een objectje zou kunnen proberen het gieten om te controleren of het van het type 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: De asoperator is een soort van veilige-cast die null zal terugkeren als de runtime type LHS argument niet overeenkomt met het statisch type geïdentificeerd door de RHS argument.

antwoordde op 03/12/2019 om 00:07
bron van user

stemmen
2

U hoeft niet LINQ om toegang te krijgen tot een specifieke index van een array.

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

Aangezien de array van verschillende soorten waarden Ik neem aan dat wij een reeks object. Daarom moeten we werpen om de verwachte soort in staat zijn om toegang tot specifieke gebieden of eigenschappen.

Indien de waarde nul of niet overeenkomt asoplevert null. De nul-voorwaardelijke operators ?.voert een deel of aansluitelement werking indien een operand is niet nul en anderszins terugkeren null.

Als u niet de index van de gewenste waarde weet, kunt u opvragen bij

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

Als u zeker weet dat de gewenste waarde is er en niet nul, kan je er bij neervalt het ?.

antwoordde op 03/12/2019 om 00:11
bron van user

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