我有一個private readonly
列表LinkLabel
s(IList<LinkLabel>
)。我後來添加LinkLabel
s到這個列表,這些標籤添加到FlowLayoutPanel
喜歡如下:從x到y的協變陣列轉換可能導致運行時異常
foreach(var s in strings)
{
_list.Add(new LinkLabel{Text=s});
}
flPanel.Controls.AddRange(_list.ToArray());
ReSharper的顯示我一個警告:Co-variant array conversion from LinkLabel[] to Control[] can cause run-time exception on write operation
。
請幫我弄清楚:
- 這是什麼意思?
- 這是一個用戶控件,不會被多個對象訪問以設置標籤,因此保留代碼不會影響它。
我理解運行時/編譯時差,如你的例子,但不是從特殊類型轉換爲基類型合法嗎?此外,我已經鍵入列表,我將從'LinkLabel'(專用類型)到'Control'(基本類型)。 – TheVillageIdiot 2012-01-02 19:16:31
是的,從LinkLabel轉換爲Control是合法的,但這不同於此處所發生的情況。這是關於從'LinkLabel []'轉換爲'Control []'的轉換警告,這仍然是合法的,但是會有運行時問題。所有改變的是數組被引用的方式。數組本身沒有改變。看到這個問題?該數組仍然是派生類型的數組。該引用是通過一個基本類型的數組。因此,爲基類型分配一個元素是合法的。但運行時類型不支持它。 – 2012-01-02 19:21:28
在你的情況下,我不認爲這是一個問題,你只是使用數組添加到控件列表。 – 2012-01-02 19:22:03