Note that there are some explanatory texts on larger screens.

plurals
  1. POQuestion About Passing Parameters To Methods That Return Lambdas
    text
    copied!<p>(with C# 3.0 and VS 2008).</p> <p>Doing MVVM WPF stuff you often write properties like this:</p> <pre><code>public bool MyProperty { get{return _myProperty;} set{ if(_myProperty == value)return; _myProperty = value; RaisePropertyChanged("MyProperty"); } } </code></pre> <p>Doing TDD I often end up writing tests such as:</p> <pre><code>[Test] public void MyPropertyRaisesPropertyChangedWhenChanged(){ var mySUT = CreateSUT(); bool eventRaised = false; string propName = ""; mySUT.PropertyChanged += (s,e)=&gt;{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... } </code></pre> <p>I experimented with a method like this:</p> <pre><code>public class MyTestMethods{ public static PropertyChangedEventHandler MakePropertyChangedHandler( bool eventWasRaised, string propertyName){ return (s,e)=&gt;{eventWasRaised = true; propertyName = e.PropertyName}; } } </code></pre> <p>So that I could write my test:</p> <pre><code>[Test] public void MyPropertyRaisesPropertyChangedWhenChanged(){ var mySUT = CreateSUT(); bool eventRaised = false; string propName = ""; mySUT.PropertyChanged += MyTestMethods.MakePropertyChangedHandler(eventRaised,propName); // etc... } </code></pre> <p>But VS2008 told me that eventRaised would always be false.</p> <p>I thought maybe changing MakePropertyChangedHandler to use ref parameters would work</p> <pre><code> public static PropertyChangedEventHandler MakePropertyChangedHandler( ref bool eventWasRaised, ref string propertyName){ return // lambda... } </code></pre> <p>but VisualStudio tells me 'Cannot use ref or out parameter 'x' inside an anonymous method body'.</p> <p>Can anyone tell me if it's possible to write a working method like MakePropertyChangedHandler and if not, how come?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload