我具有以下鑑於代碼(以JavaScript)對象引用不設置爲一個對象的一個實例在View
console.log("@Model.Sides.SingleOrDefault(a => a.Name == "B").Surfaces.Count");
拋出異常
對象引用不設置到的實例一個對象
如何在發生異常時發生 - 什麼都沒有發生?
我具有以下鑑於代碼(以JavaScript)對象引用不設置爲一個對象的一個實例在View
console.log("@Model.Sides.SingleOrDefault(a => a.Name == "B").Surfaces.Count");
拋出異常
對象引用不設置到的實例一個對象
如何在發生異常時發生 - 什麼都沒有發生?
在您的情況下,可能會出現@Model.Sides
中沒有物品的情況。在這種情況下,您可以使用。
@if(Model.Sides.Any() && Model.Sides.SingleOrDefault(a => a.Name == "B").Any())
{
console.log("@Model.Sides.SingleOrDefault(a => a.Name == "B").Surfaces.Count");
}
else
{
console.log("0");
}
你只需要檢查你的對象是否被初始化。這個邏輯應該超出你的觀點。
@{
int count = 0;
//Check the model isnt null first
if (Model != null)
{
var side = Model.Sides.SingleOrDefault(a => a.Name == "B");
if (side != null)
{
//You can perform null check on surfaces here as well
count = side.Surfaces.Count;
}
}
}
<script>
console.log("@count");
</script>
你可以嘗試以下
@if(Model.Sides.SingleOrDefault(a => a.Name == "B").Any())
{
console.log("@Model.Sides.SingleOrDefault(a => a.Name == "B").Surfaces.Count");
}
else
{
console.log("0");
}
SingleOrDefault
將返回NULL,如果列表中不包含正好一個項目。
如果'where'子句a.Name == 'B'
沒有完全返回一個項目,則結果將爲空。
因此,如果您的Sides列表中沒有一個'B'(即沒有或2個或多於2個),SingleOrDefault
的結果將爲空,並且.Surfaces
會給出錯誤'Object reference not set to an對象的實例。
如果你只是想計數爲零時,有不只是一個B面,然後用:
console.log("@(Model.Sides.SingleOrDefault(a => a.Name == "B") ?? new Side { Surfaces = new List<Surface>() }).Surfaces.Count");
哪裏?意思是:如果左邊部分爲null,返回此而不是空 ,你創建一個虛擬Side
一個空列表,以便Surfaces.Count == 0
另外,使用一個變量:
@{
var side = Model.Sides.SingleOrDefault(a => a.Name == "B");
if (side == null)
{
@:console.log("none")
}
else
{
@:console.log(@side.Surfaces.Count);
}
}
作爲一種清潔的替代,你可以使用SelectMany()
代替,像(未經測試):
Model.Sides.Where(a=>a.Name=="B").SelectMany(x=>x.Surfaces).Count()
,那麼你就不需要擔心臨時變量等,但將返回「面」的數量爲所有「B」雙方,所以可能不是你的要求。
漁獲量(E)做什麼:
這是指能夠抑制任何錯誤。將你認爲可能錯誤的代碼封裝在try catch中,catch不做任何事情。
但是,這可能會導致更多的問題,只是要小心空的catch塊。
例如:
try
{
//code that errors
}
catch (e)
{
;
}
//Continue
你需要躲避的console.log即@:執行console.log( 「0」); – heymega