首頁 > 後端開發 > C++ > 如何在 C# 中存取其範圍之外的匿名類型物件?

如何在 C# 中存取其範圍之外的匿名類型物件?

DDD
發布: 2024-12-29 22:01:25
原創
762 人瀏覽過

How Can I Access Anonymous Type Objects Outside Their Scope in C#?

在C# 中存取超出其範圍的匿名類型物件

在C# 中存取超出其聲明範圍的匿名類型成員可能會帶來挑戰,尤其是當嘗試在方法之間傳輸資料。考慮以下程式碼:

void FuncB()
{
    var obj = FuncA();
    Console.WriteLine(obj.Name);
}

FuncA()
{
    var a = (from e in DB.Entities
        where e.Id == 1
        select new {Id = e.Id, Name = e.Name}).FirstOrDefault();

    return a;
}
登入後複製

不幸的是,此程式碼將導致錯誤,因為 obj 在 FuncA() 之外不再可存取。

謹慎的方法

通常建議避免存取超出其範圍的匿名類型物件。這種做法可能會導致程式碼混亂和潛在錯誤。但是,如果絕對需要存取其範圍之外的匿名類型對象,則有一種稱為“按示例進行轉換”的解決方法。

The Cast by Example Hack

This技術涉及使用 CastByExample 方法將匿名類型物件轉換為所需類型。以下是一個範例:

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;
}
登入後複製

透過提供範例對象,CastByExample() 可以推斷正確的類型並將目標對象強制轉換為該類型。

注意

雖然透過範例轉換技術可能很有用,但應謹慎使用。如果目標物件與提供的範例不匹配,這種做法可能會導致轉換錯誤。始終建議考慮使用替代方法來存取其範圍之外的匿名類型物件。

以上是如何在 C# 中存取其範圍之外的匿名類型物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板