[英]implicit conversion between 'void' and '<null>'?
我正在嘗試在這里做一件非常簡單的事情-
我需要在表格布局面板中找到一個控件
1)如果控件存在-刪除控件
2)否則我不需要做任何事情
我決定除了if \\ else條件外,還使用條件運算符。 我的代碼是:
var temp=(tableLayoutExamPanel.Controls.Find("lbl3", true)[0].Name==("lbl3")) ? (tableLayoutExamPanel.Controls.Find("lbl3", true)[0].Dispose()) : null ;
但是我面臨這個錯誤:
Type of conditional expression cannot be determined because there is no implicit conversion between 'void' and '<null>'
google上有很多解決方案,但沒有一個對我有用,而且我沒有發現任何針對null和void的解決方案,都需要幫助。
提前致謝。
Dispose
不返回任何內容,它的返回值為void
。 不能將void
分配給變量。
在您的方案中使用條件運算符真的沒有任何意義。 只需使用以下命令:
var control = tableLayoutExamPanel.Controls.Find("lbl3", true)[0];
if(control.Name==("lbl3"))
control.Dispose();
在使用三元運算符的條件表達式中,表達式的兩側應返回相同的值。 在您的表達式中,第一面返回void,第二面返回null,並且兩者不是同一對象。
你見過這樣的事情:
var test = void; // <- doesn't compile
我發現您對條件運算符的使用非常混亂,不需要
我認為這更清楚
var temp=tableLayoutExamPanel.Controls.Find("lbl3", true);
if(temp != null && temp.Length > 0)
temp[0].Dispose();
順便說一下,ControlsCollection類的Find方法
通過控件的Name屬性搜索控件,並構建所有匹配控件的數組。
因此,無需對照名稱進行檢查,但是檢查是否至少已檢索到一個控件更安全。
“我決定為此使用條件運算符”
別。
沒有理由為此使用條件運算符,因為您不希望獲得值。 這將使代碼更難於理解,因為您實際上是在做表達式的副作用,並得到一個無意義的值。
出現錯誤的原因是,一個操作數返回null
,而另一個操作數根本不返回任何內容。 要使用條件運算符,兩個操作數都必須返回一個值,並且這些值必須兼容。
只需使用一條if
語句:
Control c = tableLayoutExamPanel.Controls.Find("lbl3", true)[0];
if (c.Name==("lbl3")) {
c.Dispose();
}
您無法將var temp
分配為null
,請參閱此頁面http://www.dotnetperls.com/var 。 改用其他任何值。 除此之外,請確保Dispose
函數返回的值不等於void
和null
。
您可以將代碼更改為以下內容:
var temp = (tableLayoutExamPanel.Controls.Find("lbl3", true)[0].Name == ("lbl3"))
tableLayoutExamPanel.Controls.Find("lbl3", true)[0] : null;
if ( temp != null )
temp.Dispose();
有關詳細信息,請訪問: http : //www.microsoft.com/zh-cn/download/confirmation.aspx?id= 7029(7.14有條件的運算符)
void
不是真正的數據類型,它用於聲明方法不返回任何值。 要變通,我認為您可以執行以下操作:
public static class ControlExtension {
public static object Dispose2(this Control c){
c.Dispose();
return null;//or anything you want
}
}
//Then
var temp=(tableLayoutExamPanel.Controls.Find("lbl3", true)[0].Name==("lbl3")) ? (tableLayoutExamPanel.Controls.Find("lbl3", true)[0].Dispose2()) : null ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.