我有一個列表<組件>集合(組件是一個自定義類)與單個元素從XTYPE繼承。X.Single((c)=> c是[type])不起作用
但出於某種原因,這並不工作:
X = (XTYPE)Components.Single((c) => c is XTYPE);
我得到消息一個InvalidOperationException「序列中沒有匹配的元素」 但是,如果我把一個斷點在該行,並做到這一點返回true
:
Components[0] is XTYPE
而且如果我這樣做,它返回true
:
Components[0].GetType().BaseType.BaseType == typeof(XTYPE)
幫助。
OK,所以我增加了一些檢查到我的代碼...
foreach (Component c in Components)
Console.WriteLine(c.GetType().BaseType.BaseType == typeof(Bridge));
if (Components.Count == 0)
throw new Exception("No components");
if (!(Components[0].GetType().BaseType.BaseType == typeof(Bridge)))
throw new Exception("Not bridge.");
假被寫入到控制檯,但類型名稱是相同的。 這可能是DLL地獄。現在需要一組差異化的信息來回答問題。
我想你們已經幫助我走向我的解決方案。
進一步說明:有問題的組件通過反射從具有XTYPE的DLL的單獨實例實例化。所以現在我們有兩個XTYPE,但是它們在技術上並不是相同的類型,因爲它們有一個diff類型的句柄。
調試器沒有在正確的上下文中檢查,所以它認爲類型是相同的。但這是錯誤的。
它不工作,因爲你的大寫鎖定鍵已損壞。 – CodesInChaos
什麼*種類的「不起作用」? – AakashM
真正有趣的兄弟。 –