CustomObjekt temp = myCustomList.Find(x => typeof(x.myTyp) is T)
這在語法上是不正確的,那會是正確的?
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();
如果它是您也可以用myCustomList.Find
代替Where...FirstOrdefault()
。
CustomObjekt temp = myCustomList.Find(x => x.myTyp.GetType() == typeof(T));
但是'typeof(x.myTyp)'不會編譯O_o –
類似於typeof(「」)'的東西也不會編譯太......'typeof(x.myTyp)'是絕對的不正確,不是嗎? –
@MatíasFidemraizer:現在應該工作。 –
這在lambda表達式,委託或任何地方都不正確。
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
。
你可以使用的GetType()是這樣的:
CustomObjekt temp = myCustomList.Find(x => x.myTyp.GetType() == typeof(T));
謝謝,但'x.myTyp'是動態的,所以我不能使用它像你寫的。 – kkkk00999
是什麼類型'x.myTyp'?你需要支持繼承嗎? (即''x.myTyp''可以是'T'或者從**'T'繼承嗎? –
嗨,'x.myTyp'是用'dynamic'聲明的,通常'x.myTyp'包含這個值'typeof(AnyObject)' – kkkk00999