存取超出聲明範圍的匿名類型物件
在C# 中,匿名類型是根據從來源中提取的屬性名稱和值動態生成的。但是,這些物件的範圍僅限於聲明它們的區塊。這就提出了一個問題:我們如何存取聲明範圍之外的匿名類型物件?
使用「按範例轉換」(建議謹慎)
雖然通常不推薦,一種稱為「透過範例轉換」的技術允許存取超出其範圍的匿名類型物件。此駭客涉及建立一個單獨的「範例」對象,其屬性與我們要存取的匿名類型相同。
實作:
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); } private object FuncA() { var a = from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }; return a.FirstOrDefault(); } private T CastByExample<T>(object target, T example) { return (T)target; }
注意事項:
總之,使用「透過範例轉換」來存取超出其範圍的匿名類型物件是可能的,但這是一種危險的做法,應盡可能避免。
以上是如何在 C# 中存取其聲明範圍之外的匿名類型物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!