Usar el operador nulo-condicional en el lado izquierdo de una tarea

Tengo algunas páginas, cada una con una propiedad llamada Data . En otra página estoy configurando esta información de esta manera:

 if (MyPage1 != null) MyPage1.Data = this.data; if (MyPage2 != null) MyPage2.Data = this.data; if (MyPage3 != null) MyPage3.Data = this.data; 

¿Hay alguna posibilidad de utilizar el operador nulo condicional en MyPage ? Estoy pensando en algo como esto:

 MyPage?.Data = this.data; 

Pero cuando lo escribo así, me sale el siguiente error:

El lado izquierdo de una tarea debe ser una variable, propiedad o indexador.

Sé que es porque MyPage podría ser nulo y el lado izquierdo ya no sería una variable.

No es que no pueda usarlo como lo tengo ya, pero solo quiero saber si hay alguna posibilidad de utilizar el operador condicional nulo en esto.

    El operador de propagación nulo devuelve un valor. Y como debe tener una variable en el lado izquierdo de una tarea, y no un valor, no puede usarla de esta manera.

    Claro, podrías hacer las cosas más cortas usando el operador de tenary, pero eso, en cambio, realmente no ayuda en el aspecto de legibilidad.

    El comentario de Joachim Isaksson sobre su pregunta muestra un enfoque diferente que debería funcionar.

    Como sugirió Joachim Isaksson en los comentarios, ahora tengo un método SetData(Data data) y lo uso así:

     MyPage1?.SetData(this.data); MyPage2?.SetData(this.data); MyPage3?.SetData(this.data); 

    Pruebe esto Agregue todas sus páginas a myPageList.

     IEnumerable myPageList; foreach(MyPage myPage in myPageList) { if (myPage != null) myPage.Data = this.data; } 

    Vine con la siguiente extensión,

     public static class ObjectExtensions { public static void SetValue(this object @object, string propertyName, TValue value) { var property = @object.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance); if (property?.CanWrite == true) property.SetValue(@object, value, null); } } 

    Que se puede llamar globalmente; esto solo funciona en propiedades públicas.

     myObject?.SetValue("MyProperty", new SomeObject()); 

    La siguiente versión mejorada funciona en cualquier cosa,

     public static void SetValue(this TObject @object, Action assignment) { assignment(@object); } 

    Y también se puede llamar globalmente,

     myObject?.SetValue(i => i.MyProperty = new SomeObject()); 

    Pero el nombre de la extensión es algo engañoso ya que la Action no requiere una asignación exclusivamente.

    Un método de extensión genérico de SetValue (pero solo para propiedades de ref) sería:

      public static void SetValue(this T property, T value) { property = value; } 

    Y será usado como

     ButtonOrNull?.Visibility.SetValue(Visibility.Hidden);