anonymous class and an instance of that class using object initializer dịch - anonymous class and an instance of that class using object initializer Việt làm thế nào để nói

anonymous class and an instance of

anonymous class and an instance of that class using object initializers. For instance, we can initialize an anonymous customer address object:
new { Customer = customer, Address = address } This declares an anonymous class with two properties, Customer and Address, and initializes it with an instance of the Customer class and an instance of the Address class. The C# compiler can infer the property types with the types of assigned values, so here, the Customer property type is the Customer class, and the Address property type is the Address class. As a normal, named class, anonymous classes can have properties of any type. Behind the scenes, the C# compiler generates a unique name for the new type. This name cannot be referenced in application code; therefore, it is considered nameless.
Implicitly Typed Local Variables Now, let’s go back to the declaration of query results where you declare the result as type var:
var result = ... Because the select clause returns an instance of an anonymous type, you cannot define an explicit type IEnumerable. Fortunately, C# 3.0 provides another feature—implicitly typed local variables—that solves this problem. You can declare an implicitly typed local variable by specifying its type as var:
var id = 1; var name = "Keith"; var customers = new List(); var person = new {FirstName = "Donna", LastName = "Gates", Phone="123-456-7890" }; The C# compiler infers the type of an implicitly typed local variable from its initialized value. Therefore, you must initialize such a variable when you declare it. In the preceding code snippet, the type of id will be set as an integer, the type of name as a string, and the type of customers as a strongly typed List of Customer objects. The type of the last variable, person, is an anonymous type containing three properties: FirstName, LastName, and Phone. Although this type has no name in our code, the C#
compiler secretly assigns it one and keeps track of its instances. In fact, the Visual Studio IDE IntelliSense is also aware of anonymous types, as shown in Figure 13-1.
Back in Example 13-3, result is an instance of the constructed IEnumerable that contains query results, where the type of the argument T is the anonymous type that contains two properties: Customer and Address. Now that the query is defined, the next statement executes it using the foreach loop:
foreach (var ca in result) { Console.WriteLine(string.Format("{0}
Address: {1}", ca.Customer, ca.Address)); } As the result is an implicitly typed IEnumerable of the anonymous class {Customer, Address}, the iteration variable is also implicitly typed to the same class. For each object in the result list, this example simply prints its properties.
Extension Methods If you already know a little SQL, the query expressions introduced in previous sections are quite intuitive and easy to understand because LINQ is similar to SQL. As C# code is ultimately executed by the .NET CLR, the C# compiler has to translate query expressions to the format understandable by .NET. Because the .NET runtime understands method calls that can be executed, the LINQ query expressions written in C# are translated into a series of method calls. Such methods are called extension methods, and they are defined in a slightly different way than normal methods. Example 13-5 is identical to Example 13-1 except it uses query operator extension methods instead of query expressions. The parts of the code that have not changed are omitted for brevity.
Figure 13-1. Visual Studio IntelliSense recognizes anonymous types
Example 13-5. Using query operator extension methods
using System; using System.Collections.Generic; using System.Linq; namespace Programming_CSharp
Example 13-5. Using query operator extension methods (continued)
{ // Simple customer class public class Customer { // Same as in Example 13-1 }
// Main program public class Tester { static void Main() { List customers = CreateCustomerList();
// Find customer by first name IEnumerable result = customers.Where(customer => customer.FirstName == "Donna"); Console.WriteLine("FirstName == "Donna""); foreach (Customer customer in result) Console.WriteLine(customer.ToString()); }
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
lớp học vô danh và một thể hiện của lớp đó bằng cách sử dụng các đối tượng initializers. Ví dụ, chúng ta có thể khởi tạo một đối tượng địa chỉ khách hàng vô danh:mới {khách hàng = khách hàng, địa chỉ = địa chỉ} này tuyên bố một lớp học vô danh với hai thuộc tính, khách hàng và địa chỉ, và khởi nó với một thể hiện của lớp khách hàng và một thể hiện của lớp địa chỉ. Trình biên dịch C# có thể suy ra các loại bất động sản với các loại của các giá trị được chỉ định, vì vậy ở đây, loại tài sản của khách hàng là lớp khách hàng và loại hình bất động sản địa chỉ là địa chỉ lớp. Như là một lớp học bình thường, được đặt tên, các lớp học vô danh có thể có thuộc tính của bất kỳ loại. Đằng sau hậu trường, trình biên dịch C# tạo ra một tên duy nhất cho các loại hình mới. Tên này không thể được tham chiếu trong các mã số ứng dụng; do đó, nó được coi là vô danh.Ngầm gõ địa phương biến bây giờ, hãy trở về tuyên bố về kết quả truy vấn mà bạn đã khai báo kết quả như loại var:kết quả var =... Bởi vì các khoản lựa chọn trả về một thể hiện của một loại vô danh, bạn không thể xác định một loại rõ ràng IEnumerable. May mắn thay, C# 3.0 cung cấp các tính năng khác — ngầm gõ các biến địa phương — mà giải quyết vấn đề này. Bạn có thể khai báo một biến địa phương ngầm gõ bằng cách xác định loại hình của nó như là var:var id = 1; var tên = "Keith"; var khách = danh sách mới(); var người = mới {FirstName = "Donna", LastName = "Gates", điện thoại = "123-456-7890"}; Trình biên dịch C# infers loại một biến địa phương ngầm gõ từ giá trị khởi tạo của nó. Vì vậy, bạn phải khởi tạo một biến khi bạn khai báo nó. Trong đoạn mã trước, loại id sẽ được thiết lập như là một số nguyên, các loại tên như là một chuỗi và loại của khách hàng như là một danh sách mạnh mẽ đánh máy các đối tượng khách hàng. Các loại biến cuối, người, là một loại vô danh có chứa ba đặc tính: FirstName, LastName, và điện thoại. Mặc dù loại này không có tên trong mã của chúng tôi, C#trình biên dịch bí mật gán cho nó một trong và theo dõi trường hợp của nó. Trong thực tế, Visual Studio IDE IntelliSense cũng là nhận thức của các loại vô danh, như minh hoạ trong hình 13-1.Trở lại ví dụ 13-3, kết quả là một thể hiện của IEnumerable xây dựng có chứa kết quả truy vấn, nơi mà các loại của các đối số T là loại vô danh có chứa hai thuộc tính: khách hàng và địa chỉ. Bây giờ mà các truy vấn được xác định, các báo cáo tiếp theo thực hiện nó bằng cách sử dụng foreach vòng lặp:foreach (var ca trong kết quả) {Console.WriteLine (string. Định dạng ("{0}
Address: {1}", ca. Khách hàng, ca. Địa chỉ)); } Như là kết quả là một IEnumerable ngầm gõ vô danh lớp {khách hàng, địa chỉ}, biến lặp đi lặp lại cũng ngầm đã nhập để học cùng lớp. Cho từng đối tượng trong danh sách kết quả, ví dụ này chỉ đơn giản là in thuộc tính của nó.Mở rộng phương pháp nếu bạn đã biết một chút SQL, các biểu thức truy vấn được giới thiệu trong phần trước là khá trực quan và dễ hiểu vì LINQ là tương tự với SQL. Như C# mã cuối cùng được thực hiện bởi net CLR, trình biên dịch C# có dịch truy vấn biểu thức định dạng dễ hiểu bởi .NET. Bởi vì thời gian chạy net hiểu được phương pháp các cuộc gọi có thể được thực thi, các biểu thức truy vấn LINQ viết bằng C# được dịch sang một loạt các cuộc gọi phương pháp. Các phương pháp như vậy được gọi là phương pháp mở rộng, và họ được xác định trong một cách hơi khác nhau hơn so với các phương pháp thông thường. Ví dụ 13-5 là giống hệt nhau ví dụ 13-1, ngoại trừ nó sử dụng phương pháp mở rộng truy vấn điều hành thay vì biểu thức truy vấn. Các bộ phận của các mã không có thay đổi được bỏ qua cho ngắn gọn.Con số 13-1. Visual Studio IntelliSense công nhận loại vô danhVí dụ 13-5. Sử dụng phương pháp mở rộng truy vấn nhà điều hànhsử dụng hệ thống; bằng cách sử dụng System.Collections.Generic; bằng cách sử dụng System.Linq; không gian tên Programming_CSharpVí dụ 13-5. Sử dụng phương pháp mở rộng truy vấn nhà điều hành (tiếp theo){/ / Lớp khách hàng đơn giản khu vực lớp khách hàng {/ / tương tự như trong ví dụ 13-1} Chương trình chính công cộng lớp Tester {tĩnh void Main() {danh sách khách hàng = CreateCustomerList(); Tìm khách hàng của tên đầu tiên IEnumerable kết quả = khách. Nơi (khách hàng = > khách hàng. FirstName == "Donna"); Console.WriteLine ("FirstName == "Donna ""); foreach (khách hàng khách hàng về kết quả) Console.WriteLine (khách hàng. ToString()); }
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
lớp vô danh và một thể hiện của lớp đó bằng initializers đối tượng. Ví dụ, chúng ta có thể khởi tạo một đối tượng địa chỉ của khách hàng vô danh:
mới {khách hàng = khách hàng, địa chỉ = địa chỉ} này khai báo một lớp vô danh với hai tài sản, khách hàng và địa chỉ, và khởi tạo nó với một thể hiện của lớp khách hàng và một thể hiện của địa chỉ lớp. Các trình biên dịch C # có thể suy ra các loại bất động sản với các loại giá trị được giao, vì vậy ở đây, các loại tài sản của khách hàng là tầng lớp khách hàng, và các loại bất động sản Địa chỉ là lớp địa chỉ. Là một, đặt tên lớp học bình thường, các lớp học vô danh có thể có các thuộc tính của bất kỳ loại. Đằng sau hậu trường, C # biên dịch tạo ra một tên duy nhất cho các loại hình mới. Tên này không thể được tham chiếu trong mã ứng dụng; . Do đó, nó được coi là không tên
Mặc nhiên Typed Local Variables Bây giờ, chúng ta hãy quay trở lại với tuyên bố kết quả truy vấn mà bạn khai báo các kết quả như loại var:
Kết quả var = ... Bởi vì mệnh đề select trả về một thể hiện của một loại vô danh, bạn không thể xác định một loại rõ ràng IEnumerable. May mắn thay, C # 3.0 cung cấp một biến-mà địa phương tính năng ngầm gõ giải quyết vấn đề này. Bạn có thể khai báo một biến địa phương mặc nhiên đánh máy bằng cách xác định loại hình của nó như var:
var id = 1; var name = "Keith"; var khách hàng = Danh sách mới(); var người = new {FirstName = "Donna", LastName = "Gates", điện thoại = "123-456-7890"}; Các trình biên dịch C # suy luận kiểu của một biến địa phương ngầm gõ từ giá trị khởi tạo của nó. Vì vậy, bạn phải khởi tạo một biến như vậy khi bạn khai báo nó. Trong đoạn mã trên, các loại id sẽ được thiết lập như là một số nguyên, các loại tên như là một chuỗi, và các loại khách hàng như một danh sách kiểu mạnhcủa các đối tượng khách hàng. Các loại cuối cùng biến, người, là một loại vô danh có chứa ba đặc tính: FirstName, LastName, và điện thoại. Mặc dù loại này không có tên trong mã của chúng tôi, # C
biên dịch bí mật gán cho nó một và theo dõi trường hợp của nó. Trong thực tế, Visual Studio IDE IntelliSense cũng là nhận thức của các loại vô danh, như thể hiện trong hình 13-1.
Trở lại trong Ví dụ 13-3, kết quả là một thể hiện của xây dựng IEnumerablecó chứa kết quả truy vấn, nơi mà các loại của các đối số T là loại vô danh có chứa hai đặc tính: Khách hàng và Địa chỉ. Bây giờ các truy vấn được xác định, các câu lệnh tiếp theo thực hiện nó bằng cách sử dụng vòng lặp foreach:
foreach (var ca trong kết quả) {Console.WriteLine (string.Format ( "{0} đường nAddress: {1}", ca.Customer, ca .Địa chỉ nhà)); } Kết quả là một ngầm gõ IEnumerablecủa lớp ẩn danh {khách hàng, Địa chỉ}, biến lặp cũng là ngầm gõ vào cùng một lớp. Đối với mỗi đối tượng trong danh sách kết quả, ví dụ này chỉ đơn giản in thuộc tính của nó.
Mở rộng phương pháp Nếu bạn đã biết một chút SQL, các biểu thức truy vấn giới thiệu trong phần trước là khá trực quan và dễ hiểu vì LINQ cũng tương tự như SQL. Như C # mã là cuối cùng thực thi bởi CLR .NET, C # biên dịch đã dịch biểu thức truy vấn đến các định dạng dễ hiểu bởi .NET. Bởi vì thời gian chạy .NET hiểu các cuộc gọi phương pháp có thể được thực hiện, các truy vấn LINQ biểu thức viết bằng C # được chuyển thành một loạt các cuộc gọi phương pháp. Những phương pháp này được gọi là phương pháp mở rộng, và chúng được định nghĩa theo một cách hơi khác so với các phương pháp thông thường. Ví dụ 13-5 là giống hệt nhau để dụ 13-1 trừ nó sử dụng phương pháp mở rộng điều hành truy vấn, thay biểu thức truy vấn. Các bộ phận của mã mà không thay đổi được bỏ qua cho ngắn gọn.
Hình 13-1. Visual Studio IntelliSense nhận loại vô danh
Ví dụ 13-5. Sử dụng phương pháp mở rộng điều hành truy vấn
sử dụng hệ thống; using System; sử dụng System.Linq; không gian tên Programming_CSharp
Ví dụ 13-5. Sử dụng phương pháp mở rộng điều hành truy vấn (tiếp theo)
{// Simple lớp khách hàng public class Customer {// Tương tự như trong Ví dụ 13-1}
// Main chương trình public class Tester {static void Main () {Danh sáchkhách hàng = CreateCustomerList ();
// Tìm khách hàng bằng tên IEnumerablekết quả = customers.Where (khách hàng => customer.FirstName == "Donna"); Console.WriteLine ( "FirstName == " Donna ""); foreach (khách hàng khách hàng trong kết quả) Console.WriteLine (customer.ToString ()); }
đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2025 I Love Translation. All reserved.

E-mail: