[英]Null Conditional Operator throws a Null Reference for Event
據我所知,null條件運算符(?。)在運行下一位代碼之前檢查null,但在此代碼中:
public delegate void EventArgs(object Sender, PlayerPage Page);
public event EventArgs PageChanged;
private PlayerPage _CurrentPage = PlayerPage.NoPage;
public PlayerPage CurrentPage
{
get { return _CurrentPage; }
set { _CurrentPage = value; PropertyChangedFire(); this?.PageChanged(this,value); }
}
但是這個?。PageChanged(this,value); 拋出空引用異常
編輯:
哦......我多么愚蠢:)改為PageChanged?.Invoke(); 感謝您及時的回復
您需要檢查PageChanged
是否為空。 然后你可以在它上面調用Invoke
來引發事件。
PageChanged?.Invoke(this,value);
附注:這正是Resharper為C#6推薦的內容
也許這不是你的想法?
?.
檢查this
為null *)。 實際上,很難對this
為空。
public event EventArgs PageChanged;
是一個事件 。 如果沒有附加處理程序,則事件的“值”為空。 在這一刻,調用this?.PageChanged(this,value);
會拋出。 我很確定是這樣的,它沒有任何用處?.
應用於this
運算符。
*)我的意思是,您當前的代碼相當於:
set
{
_CurrentPage = value;
PropertyChangedFire();
if(this!=null)
this.PageChanged(this,value);
}
在正確調用事件的同時,您需要:
set
{
_CurrentPage = value;
PropertyChangedFire();
if(this.PageChanged!=null)
this.PageChanged(this,value);
}
或者更確切地說,是線程安全的:
set
{
_CurrentPage = value;
PropertyChangedFire();
var localref = this.PageChanged;
if(localref!=null)
localref(this,value);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.