Linq kullanarak bir nesne içindeki bir nesneleri özelliklerine ulaşmak için

oy
0

Bir başka nesne içinde bir nesneden bir değer almak gerekir. Sorunum altnesnesi içinden herhangi bir değer erişemez ise, ben her zaman nesnenin değeri kendisini yazın olsun.

Kod nereye i nesneyi giriyorum

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

Bu geri sonuçlar görünümünde getiriyor

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

I (diğerlerinin yanı sıra), aşağıdaki özellikleri içerir: [1] bir öğesine erişmek gerekir ve i DisplayName erişmek için gereken

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

zamanlanan görev olduğunu

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}
Oluştur 03/12/2019 saat 00:03
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Varsayarsak x.FieldValuebir olduğunu objectbunu Çeşidi olup olmadığını kontrol etmek döküm deneyebilirsiniz 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: asOperatör LHS tartışmanın zamanı tür RHS argüman tarafından tanımlanan statik türü eşleşmezse null adlı dönecektir güvenli döküm bir tür olduğunu.

Cevap 03/12/2019 saat 00:07
kaynak kullanıcı

oy
2

Bir dizinin belirli bir dizini erişmek için LINQ gerekmez.

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

Dizi farklı tipte değerler içerdiğinden biz bir dizi olduğunu varsayalım object. Bu nedenle erişim belirli alanlar veya özelliklerinde edebilmek için beklenen tür atama gerekir.

Durumunda değer null veya tip eşleşmiyor asverecektir null. Boş-şartlı operatörleri ?.bir işlemci boş olmayan ve başka türlü dönüş yalnızca üye ya da elemanı erişim işlemi gerçekleştirir null.

Gerekli değerin indeksini bilmiyorsanız, sen ile sorgulayabilir

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

Emin gerekli değer orada değil null iseniz, bırakın ?.

Cevap 03/12/2019 saat 00:11
kaynak kullanıcı

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