OK, vẫn còn chút nhầm lẫn tại đây.
Suy luận đang diễn ra không có gì với kiểu Object.SomeProperty, nhưng mọi thứ cần làm với các loại biểu thức trong bộ khởi tạo mảng. Nói cách khác, bạn có thể làm:
object o = new[] { "string1", "string2" };
và o vẫn sẽ là tham chiếu đến mảng chuỗi.
Về cơ bản, trình biên dịch nhìn vào một biểu hiện như thế này:
new[] { A, B, C, D, ... }
(trong đó A, B, C, D vv là những biểu hiện) và cố gắng để làm việc ra các loại mảng đúng để sử dụng. Nó chỉ xem xét các loại A, B, C và D (vv) làm loại phần tử mảng. Lấy tập hợp các loại ứng cử viên này, nó cố gắng tìm một loại mà tất cả những người khác có thể được chuyển đổi hoàn toàn. Nếu không có chính xác một loại thì trình biên dịch sẽ khiếu nại.
Vì vậy, ví dụ:
new[] { new Form(), new MemoryStream() }
sẽ không biên dịch - không MemoryStream
cũng không Form
là chuyển đổi sang bên kia. Tuy nhiên:
new[] { GetSomeIDisposable(), new MemoryStream() }
sẽ được coi như một IDisposable[]
bởi vì có một chuyển đổi ngầm MemoryStream
-IDisposable
. Tương tự:
new[] { 0, 1, 3.5 } // double[]
new[] { 1, 3, 100L } // long[]
Object.SomeProperty = {"string1", "string2"}; Không có bất kỳ trình biên dịch C# nào mà tôi từng thấy! Bạn chỉ có thể làm điều đó trong quá trình khởi tạo. – leppie
khởi tạo, là khởi tạo biến. ví dụ. string [] foo = {"thanh", "baz"}; – leppie
@leppie, aboslutely đúng. Tôi đứng sửa –