Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. SetProperty!!!

SetProperty!!!

Scheduled Pinned Locked Moved The Weird and The Wonderful
csharpcomgraphicsdesigngame-dev
14 Posts 8 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Richard DeemingR Richard Deeming

    I guess that's where the second overload comes in:

    codeReview.SetProperty(review => review.Status, Status.WhatTheElephant);

    It's not fast, pretty, or even remotely sensible, but at least it's strongly typed and the property name is checked by the compiler.


    "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

    D Offline
    D Offline
    Duncan Edwards Jones
    wrote on last edited by
    #5

    Yeah - Ironically the non type safe overload shouldn't be public :-)

    1 Reply Last reply
    0
    • S Super Lloyd

      public static class Extensions
      {
      public static void SetProperty(this object domainEntity, string propertyName, object value)
      {
      var t = domainEntity.GetType();
      var p = t.GetProperty(propertyName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic);
      p.SetValue(domainEntity, value);
      }
      public static void SetProperty<T, TProp>(this T domainEntity, Expression<Func<T, TProp>> getP, TProp value)
      {
      var e = (MemberExpression)getP.Body;
      SetProperty(domainEntity, e.Member.Name, value);
      }
      }

      This piece of code has a fantastic history that is not obvious... Why is that you might ask? Well.. the single architect of our application decided that we were going to use Domain Driven Design (DDD). He also decided that all domain object property will have private setters. This being, as you can imagine, inconvenient, we got large use of this method (which he also wrote) to set private properties whenever needed! Brilliant! Let's use private property for safety! And let's use this method to ignore private! Genius! :suss: :-\ :-D

      My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

      P Online
      P Online
      PIEBALDconsult
      wrote on last edited by
      #6

      Dagnabit, I keep hitting upvote, but it only registered once. :sigh: That's right up there with the "Singleton" articles that get posted here that require the target class to have a private constructor and then use Reflection to get it. :doh:

      You'll never get very far if all you do is follow instructions.

      S 1 Reply Last reply
      0
      • S Super Lloyd

        public static class Extensions
        {
        public static void SetProperty(this object domainEntity, string propertyName, object value)
        {
        var t = domainEntity.GetType();
        var p = t.GetProperty(propertyName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic);
        p.SetValue(domainEntity, value);
        }
        public static void SetProperty<T, TProp>(this T domainEntity, Expression<Func<T, TProp>> getP, TProp value)
        {
        var e = (MemberExpression)getP.Body;
        SetProperty(domainEntity, e.Member.Name, value);
        }
        }

        This piece of code has a fantastic history that is not obvious... Why is that you might ask? Well.. the single architect of our application decided that we were going to use Domain Driven Design (DDD). He also decided that all domain object property will have private setters. This being, as you can imagine, inconvenient, we got large use of this method (which he also wrote) to set private properties whenever needed! Brilliant! Let's use private property for safety! And let's use this method to ignore private! Genius! :suss: :-\ :-D

        My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

        B Offline
        B Offline
        Brisingr Aerowing
        wrote on last edited by
        #7

        :doh: :wtf:

        What do you get when you cross a joke with a rhetorical question?

        1 Reply Last reply
        0
        • Richard DeemingR Richard Deeming

          I guess that's where the second overload comes in:

          codeReview.SetProperty(review => review.Status, Status.WhatTheElephant);

          It's not fast, pretty, or even remotely sensible, but at least it's strongly typed and the property name is checked by the compiler.


          "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

          S Offline
          S Offline
          Super Lloyd
          wrote on last edited by
          #8

          I created this second overload 2 days ago!! :laugh:

          My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

          1 Reply Last reply
          0
          • P PIEBALDconsult

            Dagnabit, I keep hitting upvote, but it only registered once. :sigh: That's right up there with the "Singleton" articles that get posted here that require the target class to have a private constructor and then use Reflection to get it. :doh:

            You'll never get very far if all you do is follow instructions.

            S Offline
            S Offline
            Super Lloyd
            wrote on last edited by
            #9

            That's just as bad, indeed!!! :laugh:

            My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

            1 Reply Last reply
            0
            • Richard DeemingR Richard Deeming

              I guess that's where the second overload comes in:

              codeReview.SetProperty(review => review.Status, Status.WhatTheElephant);

              It's not fast, pretty, or even remotely sensible, but at least it's strongly typed and the property name is checked by the compiler.


              "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

              N Offline
              N Offline
              Nicolas Dorier
              wrote on last edited by
              #10

              well, you can't use this line of code outside of review.GetType() class... Status is private ;)

              1 Reply Last reply
              0
              • S Super Lloyd

                public static class Extensions
                {
                public static void SetProperty(this object domainEntity, string propertyName, object value)
                {
                var t = domainEntity.GetType();
                var p = t.GetProperty(propertyName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic);
                p.SetValue(domainEntity, value);
                }
                public static void SetProperty<T, TProp>(this T domainEntity, Expression<Func<T, TProp>> getP, TProp value)
                {
                var e = (MemberExpression)getP.Body;
                SetProperty(domainEntity, e.Member.Name, value);
                }
                }

                This piece of code has a fantastic history that is not obvious... Why is that you might ask? Well.. the single architect of our application decided that we were going to use Domain Driven Design (DDD). He also decided that all domain object property will have private setters. This being, as you can imagine, inconvenient, we got large use of this method (which he also wrote) to set private properties whenever needed! Brilliant! Let's use private property for safety! And let's use this method to ignore private! Genius! :suss: :-\ :-D

                My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

                N Offline
                N Offline
                Nicolas Dorier
                wrote on last edited by
                #11

                It remind me when I wrote

                static bool Is(this T obj);

                with reflection... Then a friend of mind said : WTF have you written that ? instead of "obj is T". The worse of it is that I had no idea why I did something so stupid... wanted to blame somebody else, but the source control history pointed at me. :D

                S 1 Reply Last reply
                0
                • N Nicolas Dorier

                  It remind me when I wrote

                  static bool Is(this T obj);

                  with reflection... Then a friend of mind said : WTF have you written that ? instead of "obj is T". The worse of it is that I had no idea why I did something so stupid... wanted to blame somebody else, but the source control history pointed at me. :D

                  S Offline
                  S Offline
                  Super Lloyd
                  wrote on last edited by
                  #12

                  Did you mean static bool Is<T>(this **object** obj);? Because T obj is... always... T as far as I can tell! :rolleyes: :laugh: Good one anyway! :-D

                  My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

                  N 1 Reply Last reply
                  0
                  • S Super Lloyd

                    Did you mean static bool Is<T>(this **object** obj);? Because T obj is... always... T as far as I can tell! :rolleyes: :laugh: Good one anyway! :-D

                    My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

                    N Offline
                    N Offline
                    Nicolas Dorier
                    wrote on last edited by
                    #13

                    yes it was this object good point ;)

                    1 Reply Last reply
                    0
                    • S Super Lloyd

                      public static class Extensions
                      {
                      public static void SetProperty(this object domainEntity, string propertyName, object value)
                      {
                      var t = domainEntity.GetType();
                      var p = t.GetProperty(propertyName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic);
                      p.SetValue(domainEntity, value);
                      }
                      public static void SetProperty<T, TProp>(this T domainEntity, Expression<Func<T, TProp>> getP, TProp value)
                      {
                      var e = (MemberExpression)getP.Body;
                      SetProperty(domainEntity, e.Member.Name, value);
                      }
                      }

                      This piece of code has a fantastic history that is not obvious... Why is that you might ask? Well.. the single architect of our application decided that we were going to use Domain Driven Design (DDD). He also decided that all domain object property will have private setters. This being, as you can imagine, inconvenient, we got large use of this method (which he also wrote) to set private properties whenever needed! Brilliant! Let's use private property for safety! And let's use this method to ignore private! Genius! :suss: :-\ :-D

                      My programming get away... The Blog... DirectX for WinRT/C# since 2013! Taking over the world since 1371!

                      T Offline
                      T Offline
                      Tom Clement
                      wrote on last edited by
                      #14

                      I can imagine a use for something like this when implementing Undo/Redo.

                      Tom Clement articles[^]

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups