2010-08-30 49 views
7

Có cách nào trong C# để tham chiếu hàm tạo lớp làm hàm chuẩn không? Lý do là Visual Studio phàn nàn về việc sửa đổi các hàm với lambdas trong chúng, và thường là một câu lệnh chọn đơn giản của nó.Gọi hàm tạo như một hàm trong C#

Ví dụ: var ItemColors = selectedColors.Select (x => new SolidColorBrush(x));, trong đó các màu được chọn chỉ là IEnumerable<System.Windows.Media.Color>.

Về mặt kỹ thuật, không phải lambda là thừa? chọn lấy một hàm chấp nhận kiểu T và kiểu trả về U. Bàn chải màu rắn có (đúng) gõ T ở đây và trả về một chữ U. Chỉ có tôi không thấy cách nào để làm điều này trong C#. Trong F # nó sẽ là một cái gì đó giống như let ItemColors = map selectedColors (new SolidColorBrush).

TL; DR: Tôi đoán tôi đang tìm kiếm hình thức hợp lệ là var ItemColors = selectedColors.select (new SolidColorBrush) không yêu cầu lamba. Điều này có thể có trong C# hoặc ngôn ngữ không có cách nào để diễn tả cấu trúc này?

Trả lời

6

Không, bạn không thể tham khảo hàm tạo C# dưới dạng nhóm phương thức và chuyển nó làm tham số đại biểu. Cách tốt nhất để làm như vậy là thông qua cú pháp lambda trong câu hỏi của bạn.

0

Tôi không chắc tôi hiểu chính xác bạn. Nhưng bạn đang nói về một số factory?

Bằng cách này, bạn có thể chuyển giá trị cho nhà máy và nó sẽ tạo một phiên bản cho bạn.

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color); 

Hy vọng điều này sẽ hữu ích.

+0

Ông đang cố gắng để tạo ra một thể hiện ủy nhiệm từ một ctor bình thường. – SLaks

6

Bạn có thể đặt ra một phương pháp chính thức:

private static SolidColorBrush Transform(Color color) 
{ 
    return new SolidColorBrush(color); 
} 

Sau đó, bạn có thể sử dụng Select như thế này:

var ItemColors = selectedColors.Select(Transform); 
+0

+1, Đây là một mẫu xây dựng mà tôi đã phát triển gần đây khá nhiều, đặc biệt là đối với tính bất biến giả, và trong các lớp cơ sở gọi các phương thức trên các trình triển khai của chúng từ Create tĩnh(). –

Các vấn đề liên quan