我有:
CustomObjekt temp = myCustomList.Find(x => typeof(x.myTyp) is T)
这在语法上是不正确的,它会是什么?
答案 0 :(得分:2)
您可以使用Enumerable.OfType
和FirstOrdefault
:
CustomObjekt temp = myCustomList.OfType<CustomObjekt>().FirstOrDefault();
如果对象本身不属于该类型,但您必须检查属性的类型,请使用Where
:
CustomObjekt temp = myCustomList.Where(x => x.myTyp.GetType() == typeof(T)).FirstOrDefault();
如果它是List<T>
,您也可以将Where...FirstOrdefault()
替换为myCustomList.Find
。
CustomObjekt temp = myCustomList.Find(x => x.myTyp.GetType() == typeof(T));
答案 1 :(得分:0)
这在lambdas,delegates或其他任何地方都是不正确的。
typeof
运算符是从给定的类型标识符中获取Type
实例。例如typeof(string)
。
在您的情况下,您需要使用Type.IsAssignableFrom
:
CustomObjekt temp = myCustomList.Find(x => typeof(T).IsAssignableFrom(x.myTyp));
Type.IsAssignableFrom
优于someType == typeof(T)
:它需要帐户继承。它是is
运算符的最接近的解决方案,因为如果is
继承true
B is A
,B
表达式也会A
答案 2 :(得分:0)
您可以像这样使用GetType():
CustomObjekt temp = myCustomList.Find(x => x.myTyp.GetType() == typeof(T));