(C#3.0およびVS 2008)。Lambdaを返すメソッドにパラメータを渡すことに関する質問
:私はこのような方法を試し[Test]
public void MyPropertyRaisesPropertyChangedWhenChanged(){
var mySUT = CreateSUT();
bool eventRaised = false;
string propName = "";
mySUT.PropertyChanged +=
(s,e)=>{eventRaised = true;propName = e.PropertyName;};
Assert.That(mySUT.MyProperty,Is.False(),"mySUT.MyProperty");
mySUT.MyProperty = true;
Assert.That(eventRaised,"eventRaised");
Assert.That(propName, Is.EqualTo("MyProperty"),"propName");
// could check not raised when set same...
}
:私は、多くの場合のようなテストを書く終わる
TDDを行うpublic bool MyProperty {
get{return _myProperty;}
set{
if(_myProperty == value)return;
_myProperty = value;
RaisePropertyChanged("MyProperty");
}
}
:あなたは、多くの場合、このような性質を記述しMVVM WPFのものをやって
public class MyTestMethods{
public static PropertyChangedEventHandler MakePropertyChangedHandler(
bool eventWasRaised, string propertyName){
return (s,e)=>{eventWasRaised = true; propertyName = e.PropertyName};
}
}
私のテストを書くことができるように:
[Test]
public void MyPropertyRaisesPropertyChangedWhenChanged(){
var mySUT = CreateSUT();
bool eventRaised = false;
string propName = "";
mySUT.PropertyChanged +=
MyTestMethods.MakePropertyChangedHandler(eventRaised,propName);
// etc...
}
しかし、VS2008は私に、eventRaisedは常にfalseと言いました。
私は多分、REFパラメータを使用するMakePropertyChangedHandlerを変更することが
public static PropertyChangedEventHandler MakePropertyChangedHandler(
ref bool eventWasRaised, ref string propertyName){
return // lambda...
}
を働くだろうと思ったが、VisualStudioをは「匿名メソッドの本体内の 『x』 refまたはoutパラメータを使用することはできません」と言われます。
MakePropertyChangedHandlerのような作業メソッドを書くことができるかどうか誰にでも教えてもらえますか?
これが問題である理由については、http://stackoverflow.com/questions/1365689/cannot-use-ref-or-out-parameter-in-lambda-expressionsを参照してください。 – Justin
@Justin、リンクありがとうございます。 – Grokodile