簡體   English   中英

在Lambda表達式中使用typeof

[英]Using typeof in lambda expressions

我有:

CustomObjekt temp = myCustomList.Find(x => typeof(x.myTyp) is T)

這在語法上是不正確的,那將是正確的嗎?

您可以使用Enumerable.OfTypeFirstOrdefault

CustomObjekt temp = myCustomList.OfType<CustomObjekt>().FirstOrDefault();

如果對象本身不是該類型,但是您必須檢查屬性的類型,請使用Where

CustomObjekt temp = myCustomList.Where(x => x.myTyp.GetType() == typeof(T)).FirstOrDefault();

如果它是List<T>還可以用myCustomList.Find替換Where...FirstOrdefault()

CustomObjekt temp = myCustomList.Find(x => x.myTyp.GetType() == typeof(T));

這在lambda,委托或任何地方都不正確。

typeof運算符是從給定的類型標識符獲取Type實例。 例如typeof(string)

在您的情況下,您需要使用Type.IsAssignableFrom

CustomObjekt temp = myCustomList.Find(x => typeof(T).IsAssignableFrom(x.myTyp));

Type.IsAssignableFrom優於someType == typeof(T) :它考慮了繼承。 這是最接近is運算符的解決方案,因為如果B繼承Ais表達式在B is A時也為true

您可以像這樣使用GetType():

CustomObjekt temp = myCustomList.Find(x => x.myTyp.GetType() == typeof(T));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM