Segítségével Linq hozzáférni egy tárgyat ingatlan belül egy másik objektum

szavazat
0

Azt kell, hogy egy értéket egy tárgy belül egy másik objektumot. A problémám az, nem tudok hozzáférni értékeket az alobjektum, mindig kap az érték az objektum típus is.

Kód, ahol vagyok, betekintés az objektumot

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

Ez hozza vissza a találatok nézetben

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

Azt kell elérni a [1] elem, amely tartalmazza a következő tulajdonságokat (többek között), és azt kell elérni a DisplayName

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

ScheduledTask jelentése

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}
A kérdést 03/12/2019 00:03
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Feltételezve x.FieldValuevan egy objectmegpróbálhatod casting, hogy ellenőrizze, ha ez a típus 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: Az asoperátor egy egyfajta biztonságos öntött hogy vissza fog térni null, ha a futási típusú LHS érv nem egyezik meg a statikus típus által azonosított RHS érv.

Válaszolt 03/12/2019 00:07
a forrás felhasználó

szavazat
2

Nem kell LINQ hozzáférést egy adott index egy tömb.

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

Mivel a tömb értékeit tartalmazza a különböző típusú feltételezem, hogy van egy sor object. Ezért kell a leadott várt típusú ahhoz, hogy hozzáférjen bizonyos területeken vagy tulajdonságokat.

Abban az esetben, ez az érték nulla vagy a típusa nem egyezik asfog járulni null. A null-feltételes operátorok ?.végez tag vagy elem hozzáférési művelet csak akkor, ha egy operandus értéke nem nulla, egyébként visszaút null.

Ha nem tudod, hogy az index az előírt érték, akkor a lekérdezés

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

Ha biztos benne, az előírt érték van, és nem nulla, akkor vidd a ?.

Válaszolt 03/12/2019 00:11
a forrás felhasználó

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