首頁 >後端開發 >C++ >如何在 C# 中將物件轉換為匿名類型?

如何在 C# 中將物件轉換為匿名類型?

Linda Hamilton
Linda Hamilton原創
2025-01-05 22:46:40123瀏覽

How Can I Cast an Object to an Anonymous Type in C#?

轉換為匿名類型

問題是如何將物件轉換為匿名類型。匿名類型是使用物件初始值設定項建立的,通常用作儲存資料的便捷方式。但是,它們沒有類型名稱,這使得轉換它們變得困難。

將物件轉換為匿名類型的一種方法是使用一種技巧,該技巧涉及使用所需匿名的虛擬值類型。此虛擬值用於推斷要轉換的物件的類型。以下是一個範例:

public class Program
{
    public static void Main(string[] args)
    {
        var a = new { Id = 1, Name = "Bob" };
        TestMethod(a);
    }

    private static void TestMethod(object x)
    {
        // This is a dummy value, just to get 'a' to be of the right type
        var a = new { Id = 0, Name = "" };
        a = Cast(a, x);
        Console.WriteLine(a.Id + ": " + a.Name);
    }

    private static T Cast<T>(T typeHolder, object x)
    {
        // typeHolder above is just for compiler magic
        // to infer the type to cast x to
        return (T)x;
    }
}

將物件強制轉換為匿名類型的另一種方法是使用通用擴充方法。此方法可用於將物件強制轉換為任何匿名類型。以下是一個範例:

public static class AnonymousTypeExtensions
{
    public static T CastTo<T>(this object value, T targetType)
    {
        // targetType above is just for compiler magic
        // to infer the type to cast value to
        return (T)value;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        var a = new { Id = 1, Name = "Bob" };
        var b = a.CastTo(new { Id = 0, Name = "" });
        Console.WriteLine(b.Id + ": " + b.Name);
    }
}

但是,需要注意的是,以這種方式使用匿名類型可能很棘手,一般不建議這樣做。最好使用真實類型。

以上是如何在 C# 中將物件轉換為匿名類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn