跳至頁尾內容
.NET幫助

C# Anonymous Object (How it Works for Developers)

匿名物件簡介

C# 中的匿名型別提供了一種機制,可以將公共唯讀屬性封裝到一個匿名型別物件中,而無需明確定義正式的類別宣告。 它們對於建立一次性使用的資料結構非常有用。 這些是由編譯器生成的型別,直接繼承自 System.Object,有效封裝了物件屬性,並作為輕量且不可變的資料容器。 這些型別是已封閉的類別,其中編譯器會自動推斷並生成型別名稱,該名稱在源程式碼級別無法存取。 我們還將探索 IronPDF 作為 .NET 專案的 PDF 程式庫。

關鍵特徵

  • 匿名型別的功能僅限於:
  • 屬性自動實作為公共唯讀,位於匿名型別的屬性定義中。
  • 使用者無法在其中明確定義方法、事件或其他類成員,例如 Equals 或 GetHashCode 方法。
  • 無法以 null 值、匿名函式或指標型別初始化,確保匿名型別的完整性。

常見使用案例

LINQ 操作

匿名資料型別物件在 LINQ 查詢表達式中特別是在選擇匿名型別物件的子句中表現出色,它們可以有效地從大型物件中返回特定屬性子集。 這種方法通過建立僅包含必要資料的臨時物件來優化記憶體使用。

臨時資料分組

當建立正式類別過於繁瑣時,它們可以作為有效的臨時資料結構容器。這對於短期資料轉換或中間計算特別有用。

屬性封裝

匿名資料型別提供了一種乾淨的方式,可以通過唯讀屬性將相關的物件屬性打包在一起。 編譯器在保持屬性存取簡潔語法的同時確保型別安全。

語法和結構

匿名型別的建立使用 var 關鍵字和 new 運算符以及物件初始化語法遵循特定模式。 編譯器自動生成的型別名稱在源程式碼級別上仍然無法存取。

var person = new { FirstName = "Iron", LastName = "Dev", Age = 35 }; // public int age in this anonymous type
var person = new { FirstName = "Iron", LastName = "Dev", Age = 35 }; // public int age in this anonymous type
Private person = New With {
	Key .FirstName = "Iron",
	Key .LastName = "Dev",
	Key .Age = 35
}
$vbLabelText   $csharpLabel

屬性初始化規則

編譯器對匿名型別的屬性初始化實施嚴格規則。所有屬性必須在物件建立期間初始化,不能分配 null 值或指標型別。初始化後的屬性值可以使用標準點表示法進行存取,但由於其唯讀性質,初始化後無法修改。

型別推斷與匹配

var person1 = new { Name = "Iron", Age = 30 };
var person2 = new { Name = "Dev", Age = 25 };
var person1 = new { Name = "Iron", Age = 30 };
var person2 = new { Name = "Dev", Age = 25 };
Dim person1 = New With {
	Key .Name = "Iron",
	Key .Age = 30
}
Dim person2 = New With {
	Key .Name = "Dev",
	Key .Age = 25
}
$vbLabelText   $csharpLabel

編譯器為具有匹配屬性名稱、型別和順序的匿名型別生成相同的型別資訊。 這允許在集合中使用實例或作為方法參數在同一個組件中傳遞的型別相容性。

巢狀匿名型別

匿名資料型別支持匿名型別物件屬性的複雜巢狀結構。 這對於建立層次結構資料表示很有幫助:

var student = new {
    Id = 1,
    PersonalInfo = new {
        Name = "James",
        Contact = new {
            Email = "james@email.com",
            Phone = "123-456-7890"
        }
    },
    Grades = new { Math = 95, Science = 88 }
};
var student = new {
    Id = 1,
    PersonalInfo = new {
        Name = "James",
        Contact = new {
            Email = "james@email.com",
            Phone = "123-456-7890"
        }
    },
    Grades = new { Math = 95, Science = 88 }
};
Dim student = New With {
	Key .Id = 1,
	Key .PersonalInfo = New With {
		Key .Name = "James",
		Key .Contact = New With {
			Key .Email = "james@email.com",
			Key .Phone = "123-456-7890"
		}
	},
	Key .Grades = New With {
		Key .Math = 95,
		Key .Science = 88
	}
}
$vbLabelText   $csharpLabel

集合操作

匿名型別在涉及集合操作和資料轉換的情境中表現出色:

var items = new[] {
    new { ProductId = 1, Name = "Laptop", Price = 1200.00m },
    new { ProductId = 2, Name = "Mouse", Price = 25.99m },
    new { ProductId = 3, Name = "Keyboard", Price = 45.50m }
};
var items = new[] {
    new { ProductId = 1, Name = "Laptop", Price = 1200.00m },
    new { ProductId = 2, Name = "Mouse", Price = 25.99m },
    new { ProductId = 3, Name = "Keyboard", Price = 45.50m }
};
Dim items = {
	New With {
		Key .ProductId = 1,
		Key .Name = "Laptop",
		Key .Price = 1200.00D
	},
	New With {
		Key .ProductId = 2,
		Key .Name = "Mouse",
		Key .Price = 25.99D
	},
	New With {
		Key .ProductId = 3,
		Key .Name = "Keyboard",
		Key .Price = 45.50D
	}
}
$vbLabelText   $csharpLabel

IronPDF:C# PDF程式庫

IronPDF 是一個強大的程式庫,用於在 .NET 應用中生成、編輯和管理 PDF 文件。 當使用 C# 作業時,開發者常常使用匿名物件來處理輕量且即興的資料結構,特別是在不需要建立完整類別的情境中。 這些匿名物件可以無縫地與 IronPDF 共同利用來動態生成 PDF 文件。 這有助於建立靈活的解決方案,即時資料到 PDF 的工作流程。 這裡有一個範例以說明 IronPDF 如何與匿名物件合作:

範例:使用匿名物件填充 PDF

假設您有一份要按表格形式呈現在 PDF 中的銷售資料清單。 與其建立一個正式類別,您可以使用匿名物件快速格式化資料進行呈現。

using IronPdf;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // Set your IronPDF license key here
        License.LicenseKey = "Your-Licence-Key";

        // Sample data using anonymous objects
        var salesData = new[]
        {
            new { Product = "Laptop", Quantity = 2, Price = 1200.50 },
            new { Product = "Smartphone", Quantity = 5, Price = 800.00 },
            new { Product = "Headphones", Quantity = 10, Price = 150.75 }
        };

        // Create an HTML string dynamically using the anonymous object data
        var htmlContent = @"
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " +
            string.Join("", salesData.Select(item =>
                $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) +
            @"
            </tbody>
        </table>
        </body>
        </html>";

        // Generate the PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdf.SaveAs("SalesReport.pdf");
        Console.WriteLine("PDF generated successfully!");
    }
}
using IronPdf;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // Set your IronPDF license key here
        License.LicenseKey = "Your-Licence-Key";

        // Sample data using anonymous objects
        var salesData = new[]
        {
            new { Product = "Laptop", Quantity = 2, Price = 1200.50 },
            new { Product = "Smartphone", Quantity = 5, Price = 800.00 },
            new { Product = "Headphones", Quantity = 10, Price = 150.75 }
        };

        // Create an HTML string dynamically using the anonymous object data
        var htmlContent = @"
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " +
            string.Join("", salesData.Select(item =>
                $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) +
            @"
            </tbody>
        </table>
        </body>
        </html>";

        // Generate the PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdf.SaveAs("SalesReport.pdf");
        Console.WriteLine("PDF generated successfully!");
    }
}
Imports IronPdf
Imports System
Imports System.Linq

Friend Class Program
	Shared Sub Main()
		' Set your IronPDF license key here
		License.LicenseKey = "Your-Licence-Key"

		' Sample data using anonymous objects
		Dim salesData = {
			New With {
				Key .Product = "Laptop",
				Key .Quantity = 2,
				Key .Price = 1200.50
			},
			New With {
				Key .Product = "Smartphone",
				Key .Quantity = 5,
				Key .Price = 800.00
			},
			New With {
				Key .Product = "Headphones",
				Key .Quantity = 10,
				Key .Price = 150.75
			}
		}

		' Create an HTML string dynamically using the anonymous object data
		Dim htmlContent = "
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " & String.Join("", salesData.Select(Function(item) $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) & "
            </tbody>
        </table>
        </body>
        </html>"

		' Generate the PDF
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

		' Save the PDF
		pdf.SaveAs("SalesReport.pdf")
		Console.WriteLine("PDF generated successfully!")
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Anonymous Object (開發人員如何使用):圖1 - 上述程式碼範例的控制台輸出

結論

C# Anonymous Object (開發人員如何使用):圖2 - IronPDF 授權頁面

C# 中的匿名型別提供了一種靈活有效的方式來建立臨時資料結構,而無需正式的類別宣告。 它們在處理 LINQ 查詢、資料轉換和像 IronPDF 這樣的程式庫時特別有用。 將匿名型別與 IronPDF 的 PDF 生成功能結合使用,提供了建立動態、資料驅動的 PDF 的強大解決方案,且程式碼開銷最小化。

IronPDF 允許開發者通過免費試用來測試其功能,讓您輕鬆在您的 .NET 應用中探索其功能。 商業授權起價為 $999,提供對其全部功能的存取,包括高效能的 HTML 到 PDF 渲染、PDF 編輯和安全功能。

常見問題

C# 中的匿名型別是什麼?

C# 中的匿名型別提供了一種機制,將公共唯讀屬性封裝到單一匿名型別物件中,而不需要明確定義正式的類宣告。它們是由編譯器生成的型別,作為輕量級的不可變資料容器。

我如何在 C# 中建立匿名型別?

要在 C# 中建立匿名型別,您可以使用 var 關鍵字搭配 new 運算符和物件初始化語法。編譯器會根據提供的屬性自動生成型別名稱和結構。

匿名型別如何在 C# 的 LINQ 操作中運作?

匿名型別在 LINQ 查詢表達式中表現優異,特別是在選擇子句中,藉由有效地返回較大物件中特定的屬性子集來優化記憶體使用。

匿名型別可以用在巢狀結構中嗎?

是的,匿名型別可以用在巢狀結構中。這允許建立層級資料表示,匿名型別的屬性本身也可以是匿名型別物件。

我如何使用匿名物件建立動態 PDF?

匿名物件可以快速格式化資料,以便在動態 PDF 中呈現。通過與 PDF 程式庫(如 IronPDF)結合使用,您可以高效地生成 PDF,並減少編碼量。

C# 中匿名型別的限制是什麼?

匿名型別限制於具有公共唯讀屬性,且不能具有方法、事件或明確定義的類成員。它們也無法用 null 值或指標型別初始化。

匿名型別的常見使用情境是什麼?

匿名型別的常見使用情境包括臨時資料分組、屬性封裝及集合操作,在這些情況下建立正式類別會顯得過於繁瑣。

PDF 程式庫如何在 .NET 應用程式中增強資料到 PDF 的工作流程?

PDF 程式庫提供了強大的工具,能夠在 .NET 應用程式中生成、編輯和管理 PDF 文件,促進高效的資料到 PDF 的工作流程,並增強資料驅動方案。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話