我發現的每個答案都依賴於最初是一個類型化對象的匿名對象。我有一個初始化爲return new {x, y, width, height, guid}
的對象,我想獲得(然後我將使用它來獲取原始/完整對象)。從一直匿名的對象中提取單個屬性?
private void ListboxContainer_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
object selected = e.AddedItems[0];
selectedObjectText.Text = e.AddedItems[0].ToString();
Console.WriteLine(selected.ToString());
// -> "{ type = tableBlock, x = 100, y = 100, width = 300, height = 50, z = 50, guid = 0f179336-3b38-4e36-94b7-671ffd8017d9 }"
Console.WriteLine(selected.GetType().ToString());
// -> "<>f__AnonymousType2`7[System.String,System.Double,System.Double,System.Double,System.Double,System.Int32,System.String]"
dynamic d = selected;
Console.WriteLine("guid: " + d.guid);
// -> RuntimeBinderException: 'object' does not contain a definition for 'guid'
// What I eventually need to do:
//IDrawable selected = activeMap.GetDrawable(e.AddedItems[0].guid);
}
我正在尋找一個更安全/更高性能的方式來獲得的GUID(我知道有)比手動分析它的字符串。要了解更多關於這之前發生的事情的信息,請查看this的帖子(很遺憾,這被遺漏了,所以這整個帖子只是一個解決辦法)。
感謝您的幫助!
我工作的一個程序,行將'ZoomableCanvas',通過'ItemsSource'餵養,需要一個通用對象。出於某種原因,當我將一個完整的對象從(例如)TableBlock上傳到一個對象時,它無法工作,但是如果我通過'return new {param1,param2}手動創建一個通用對象;'它可以正常工作。此SO帖子中的代碼位於SelectionChanged監聽器中。我會用完整的方法更新這篇文章。其他SO帖子關於打字問題(這似乎已經通過了SO):http://stackoverflow.com/questions/21896754/supplying-typed-objects-to-zoomablecanvas – Benjin
//我最終需要做的事情: // IDrawable selected = activeMap.GetDrawable(e.AddedItems [0] .guid);.這個評論對我來說很麻煩。您正在訪問此時添加的e項。這不是一個動態的。如果你在運行時檢查e.AddedItems [0],它是什麼類型的?我懷疑這是一個對象,而不是動態的,這會導致你的問題。您目前在您的問題中所評論的代碼不會拋出錯誤。 –
我只是跟着各種各樣的其他SO帖子,說動態打字是在.net 4.0中的方式。當我打印'e.AddedItems [0] .GetType()',我得到「<> f__AnonymousType2'7 [System.String,System.Double,System.Double,System.Double,System.Double,System.Int32,System 。串]」。當我設置一個斷點時,我得到這個:http://i.imgur.com/cHwiOmF.png。它看起來沒有類型。 – Benjin