[英]Using typeof in lambda expressions
我有:
CustomObjekt temp = myCustomList.Find(x => typeof(x.myTyp) is T)
這在語法上是不正確的,那將是正確的嗎?
您可以使用Enumerable.OfType
和FirstOrdefault
:
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
繼承A
, is
表達式在B is A
時也為true
。
您可以像這樣使用GetType():
CustomObjekt temp = myCustomList.Find(x => x.myTyp.GetType() == typeof(T));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.