.NET – Tạo instance và chuyển đổi kiểu dữ liệu bất kì

Trong bài viết này sẽ giới thiệu cách giải quyết hai vấn đề bạn có thể gặp phải khi làm việc với .NET:
– Tạo instance của một kiểu dữ liệu bất kì với .
– Chuyển đổi một đối tượng sang một kiểu dữ liệu bất kì.

Tạo instance của một kiểu dữ liệu bất kì.

Việc tạo instance của một kiểu dữ liệu chỉ cần sử dụng phương thức Activator.CreateInstance(). Tuy nhiên đối với các kiểu dữ liệu không chứa parameterless constructor (phương thức khởi tạo không có tham số) thì phương thức này sẽ ném ra ngoại lệ MissingMethodException “No parameterless constructor defined for this object”.

Để giải quyết, tôi sẽ thay thế phương thứcc này bằng phương thức FormatterServices.GetUninitializedObject(). Tuy nhiên, phương thức vẫn không thể tạo được instance của kiểu string, vì vậy thay vì dùng reflection, tôi phải giải quyết bằng cách sau:

Chuyển đổi đối tượng sang kiểu dữ liệu bất kì

Với các kiểu dữ liệu nguyên thủy (primitive type), bạn có thể dùng phương thức Convert.ChangeType() để chuyển đổi. Với kiểu dữ liệu phức tạp, cách linh hoạt nhất là sử dụng reflection để lặp qua các property của đối tượng nguồn và gán cho property tương ứng của đối tượng đích.

Trường hợp viết dưới dạng extension method với tên ToType():

Kiểm tra kết quả

Để kiểm tra, tôi tạo hai class Foo và Bar sau:

Và phương thức Main():

Output:

Theo YinYang’s Programming Blog

Các tin mới hơn

Các tin cũ hơn