OITA: Oika's Information Technological Activities

@oika 情報技術的活動日誌。

C# プロパティで配列の代わりにIReadOnlyList<T>を公開する

FxCop、あるいはVisualStudio付属のコード分析で、厳しめの規則セットを使うと、以下のようなコードに対して警告が出る。

public class Person  
{  
    public string[] Nicknames { get; private set; }  

    ...  
}  
CA1819 コレクションを返すために、またはメソッドに設定するために、'Person.Nicknames' を変更してください。

続きを読む

C# イベントを一時変数に入れてスレッドセーフにnullチェックするあれ

C#で、自前でイベントを発火させる際、
ハンドラが1つも登録されていない状態でInvokeしようとすると
NullReferenceExceptionになっちゃうんで、
Nullでないことを確認してから呼び出す必要があります。

public event PropertyChangedEventHandler PropertyChanged;  

protected void RaisePropertyChanged(string propertyName)  
{  
    //nullでないことを確認してから  
    if (PropertyChanged != null)  
    {  
        //発火  
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));  
    }  
}  

シングルスレッドで動くことがわかってる場合は
上のような書き方でも問題ないんだけども、
マルチスレッドで動く場合はちょいとまずい。

続きを読む