(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...
}
나는이 같은 방법으로 실험 :
public bool MyProperty {
get{return _myProperty;}
set{
if(_myProperty == value)return;
_myProperty = value;
RaisePropertyChanged("MyProperty");
}
}
가 나는 종종 같은 테스트를 작성 결국 TDD를 수행 : 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가 항상 거짓이라고 말했습니다.
나는 어쩌면 MakePropertyChangedHandler가public static PropertyChangedEventHandler MakePropertyChangedHandler(
ref bool eventWasRaised, ref string propertyName){
return // lambda...
}
을 일하는 것이 심판 매개 변수를 사용하여 변경 알았는데으로 VisualStudio는 '익명 메소드 본체 내부에'X '심판 또는 매개 변수에서를 사용할 수 없습니다'나에게 말한다.
MakePropertyChangedHandler와 같은 작업 방법을 쓸 수 있다면 누구나 말해 줄 수 있습니까?
이것이 문제가되는 이유는 http://stackoverflow.com/questions/1365689/cannot-use-ref-or-out-parameter-in-lambda-expressions – Justin
@Justin, 링크를 제공해 주셔서 감사합니다. – Grokodile