在lambda表达式中使用typeof

时间:2016-04-06 07:37:33

标签: c# generics lambda properties

我有:

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

这在语法上是不正确的,它会是什么?

3 个答案:

答案 0 :(得分:2)

您可以使用Enumerable.OfTypeFirstOrdefault

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 AB表达式也会A

答案 2 :(得分:0)

您可以像这样使用GetType():

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