Bu, C # null yapılabilir denetimin sınırlaması mı? [çiftleme]
Dec 18 2020
Referansımda aşağıdaki CS8629 uyarısını aldım x. 'Den önceki wherecümle nedeniyle, bunun asla boş değer atanabilir bir referans olmayacağına selecteminim x.Value. Bu, C # boş kontrolünün içsel sınırlaması mıdır? CS8629 uyarısından kurtulmanın, onu bastırmaktan başka bir yolu var mı?
var myEnums = myStrings
.Select(x => x.ToEnum<MyEnum>())
.Where(x => x.HasValue)
.Select(x => x.Value) //CS8629 on x.
.ToList();
MyEnum? ToEnum(this string str);
Yanıtlar
2 Sweeper Dec 18 2020 at 08:50
Evet, sınır budur. LINQ, henüz null yapılabilir ek açıklamalarla açıklanmadı. Bu yanıtı , bu sorunu ve hepsi açık olan bu sorunu görün .
Gerçekten kullanmak istemiyorsan şöyle bir !şey yazabilirsin:
static IEnumerable<T> AsEnumerable<T>(this Nullable<T> t) where T : struct {
if (t.HasValue) {
return Enumerable.Repeat(t.Value, 1);
}
return Enumerable.Empty<T>();
}
Ardından şunu kullanın SelectMany:
var myEnums = myStrings
.Select(x => x.ToEnum())
.SelectMany(x => x.AsEnumerable())
.ToList();
UsemeAlehosaini Dec 18 2020 at 08:48
Hiçbir boş geri dönüşü olacak olsa da, döküm deneyin MyEnum?için MyEnum.
Böyle:
MyEnum myEnums = myStrings
.Select(x => x.ToEnum<MyEnum>())
.Where(x => x.HasValue)
.Select(x => x.Value) //CS8629 on x.
.ToList();
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'