訪問超出其範圍的匿名類型物件的屬性
在C# 中使用匿名類型時,您可能會遇到需要存取其範圍的情況屬性超出了聲明的範圍。由於匿名類型的性質,這可能會帶來挑戰。
要存取像 FuncB() 這樣的巢狀函數中定義的匿名類型的屬性,您可以採用一種稱為「透過範例進行轉換」的技術。此方法使用反射來識別匿名物件的類型,然後將其轉換為相容類型。
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; }
此技術涉及建立一個與匿名物件具有相同屬性的範例物件type(程式碼片段中的範例),然後使用反射來確定物件的類型。最後,將原始物件(目標)轉換為範例物件的類型,這使您可以存取其屬性。
免責聲明:
雖然技術上可以使用這種「透過範例轉換」的技巧來存取其範圍之外的匿名類型對象,通常不建議這樣做。匿名類型被設計為在自己的範圍內使用,並將其生命週期延長到超出範圍可能會導致意外的行為和潛在的錯誤。通常最好將資料傳回呼叫函數或使用另一種物件導向的方法來維護封裝和資料完整性。
以上是如何在 C# 中存取其範圍之外的匿名類型屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!