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. General Programming
  3. C#
  4. Generics Problems

Generics Problems

Scheduled Pinned Locked Moved C#
helpquestioncsharpwinforms
24 Posts 7 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.
  • C Clifford Nelson

    What I think you need is:

    public partial class Form1<T> : Form where T : new()
    {
    T entity;

    public Form1()
    {
        InitializeComponent();
        entity = new T;
    }
    

    }

    K Offline
    K Offline
    Kevin Marois
    wrote on last edited by
    #3

    yes, but I still wont have access to the properties, at least without doing

    Type type = typeof(T);
    var prop = type.GetProperty("Name");
    prop.SetValue(entity, "TheName", null);

    not sure I like this because the property names would have to be listed in calls to GetProperty. I dunno, what do you think?

    If it's not broken, fix it until it is

    1 Reply Last reply
    0
    • K Kevin Marois

      I'm refactoring a WinForms project. I have 2 forms that do the same thing, except the data entities passed in are slightly different, so the guy who wrote them decided to duplicate the forms instead of making one form that works for both. So I'm refactoring them. Assume I have these 2 entites:

      public class Entity1
      {
      public string SomeProperty { get; set; }
      public string Name { get; set; }
      }
      public class Entity2
      {
      public string SomeProperty { get; set; }
      public string Caption { get; set; }
      }

      In the CTOR of the form I have:

      public partial class Form1 : Form
      {
      T entity;

      public Form1()
      {
          InitializeComponent();
      
          entity = (T)Activator.CreateInstance(typeof(T));
      
      }
      

      }

      The problem is I now need to set properties on the object passed in. In most cases the 2 objects have the same name properties, but ther are differences. What is the right way to work with this object? Seems like I have no choice but to cast. Thanks

      If it's not broken, fix it until it is

      C Offline
      C Offline
      Clifford Nelson
      wrote on last edited by
      #4

      OK What you need to do is create and interface:

      public interface IEntity
      {
      string SomeProperty { get; set; }
      string Caption { get; set; }
      }

      Then use this interface on the classes:

      public class Entity1 : IEntity
      {
      public string SomeProperty { get; set; }
      public string Name { get; set; }
      }
      public class Entity2 : IEntity
      {
      public string SomeProperty { get; set; }
      public string Caption { get; set; }
      }

      Then use is in the generic:

      public partial class Form1<T> : Form where T : IEntity, new()
      {
      T entity;

      public Form1()
      {
          InitializeComponent();
          entity = new T();
      }
      

      }

      K 1 Reply Last reply
      0
      • C Clifford Nelson

        OK What you need to do is create and interface:

        public interface IEntity
        {
        string SomeProperty { get; set; }
        string Caption { get; set; }
        }

        Then use this interface on the classes:

        public class Entity1 : IEntity
        {
        public string SomeProperty { get; set; }
        public string Name { get; set; }
        }
        public class Entity2 : IEntity
        {
        public string SomeProperty { get; set; }
        public string Caption { get; set; }
        }

        Then use is in the generic:

        public partial class Form1<T> : Form where T : IEntity, new()
        {
        T entity;

        public Form1()
        {
            InitializeComponent();
            entity = new T();
        }
        

        }

        K Offline
        K Offline
        Kevin Marois
        wrote on last edited by
        #5

        Can't use an interface because most of this code is already in place. Have to work with what I have. However, I think this will do it:

        public partial class Form1 : Form
        {
        T DataItem;
        Type type = typeof(T);

        public Form1()
        {
            InitializeComponent();
        
            var DistrictId = 10;
            DataItem = (T)Activator.CreateInstance(typeof(T), DistrictId);
        
            setProperty("Name", "The Name");
            setProperty("LinkedToBilling", true);
            setProperty("BillingStartDate", new DateTime(2012, 01, 15));
        }
        
        private void setProperty(string PropertyName, T Value)
        {
            var prop = DataItem.GetType().GetProperty(PropertyName);
        
            if (prop != null)
            {
                type.GetProperty(PropertyName).SetValue(DataItem, Value, null);
            }
        }
        

        }

        This will allow me to attempt to set a property. Remember that in this case most of the properties exist on both objects. But this code allows me to not have multiple IF blocks. I think it's clean, and it solved the issue.

        If it's not broken, fix it until it is

        E C 2 Replies Last reply
        0
        • K Kevin Marois

          Can't use an interface because most of this code is already in place. Have to work with what I have. However, I think this will do it:

          public partial class Form1 : Form
          {
          T DataItem;
          Type type = typeof(T);

          public Form1()
          {
              InitializeComponent();
          
              var DistrictId = 10;
              DataItem = (T)Activator.CreateInstance(typeof(T), DistrictId);
          
              setProperty("Name", "The Name");
              setProperty("LinkedToBilling", true);
              setProperty("BillingStartDate", new DateTime(2012, 01, 15));
          }
          
          private void setProperty(string PropertyName, T Value)
          {
              var prop = DataItem.GetType().GetProperty(PropertyName);
          
              if (prop != null)
              {
                  type.GetProperty(PropertyName).SetValue(DataItem, Value, null);
              }
          }
          

          }

          This will allow me to attempt to set a property. Remember that in this case most of the properties exist on both objects. But this code allows me to not have multiple IF blocks. I think it's clean, and it solved the issue.

          If it's not broken, fix it until it is

          E Offline
          E Offline
          Ennis Ray Lynch Jr
          wrote on last edited by
          #6

          Why bother with generics if you can't use them? You are better off doing things in a straight forward manner twice, than once in a non-obvious manner.

          setProperty("Name", "The Name");
          setProperty("LinkedToBilling", true);
          setProperty("BillingStartDate", new DateTime(2012, 01, 15));

          May look like a nice, elegant solution, until you realize that

          setProperty("Name", "The Name");
          setProperty("LinkedToBiling", true);
          setProperty("BillingStartDate", new DateTime(2012, 01, 15));

          doesn't give a compiler error.

          Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

          K C 2 Replies Last reply
          0
          • E Ennis Ray Lynch Jr

            Why bother with generics if you can't use them? You are better off doing things in a straight forward manner twice, than once in a non-obvious manner.

            setProperty("Name", "The Name");
            setProperty("LinkedToBilling", true);
            setProperty("BillingStartDate", new DateTime(2012, 01, 15));

            May look like a nice, elegant solution, until you realize that

            setProperty("Name", "The Name");
            setProperty("LinkedToBiling", true);
            setProperty("BillingStartDate", new DateTime(2012, 01, 15));

            doesn't give a compiler error.

            Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

            K Offline
            K Offline
            Kevin Marois
            wrote on last edited by
            #7

            Ennis Ray Lynch, Jr. wrote:

            doesn't give a compiler error.

            Exactly. If a property doesn't exist, then I don't want a compiler error.

            If it's not broken, fix it until it is

            E 1 Reply Last reply
            0
            • K Kevin Marois

              Ennis Ray Lynch, Jr. wrote:

              doesn't give a compiler error.

              Exactly. If a property doesn't exist, then I don't want a compiler error.

              If it's not broken, fix it until it is

              E Offline
              E Offline
              Ennis Ray Lynch Jr
              wrote on last edited by
              #8

              I am going to have to go out on a limb here and say that yes you do. If you don't then you probably need to reconsider your approach. You are refactoring code here, refactoring implies, improving, not reducing lines of code, increasing complexity, or reducing maintainability. This fails the smell test. If you can't add improvement, don't refactor.

              Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

              K 1 Reply Last reply
              0
              • E Ennis Ray Lynch Jr

                I am going to have to go out on a limb here and say that yes you do. If you don't then you probably need to reconsider your approach. You are refactoring code here, refactoring implies, improving, not reducing lines of code, increasing complexity, or reducing maintainability. This fails the smell test. If you can't add improvement, don't refactor.

                Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

                K Offline
                K Offline
                Kevin Marois
                wrote on last edited by
                #9

                It solves what I'm trying to accomplish. Lines of code, prettyiness, ect, are not the prime concern. I'm trying to make a form work for more than one entity. Added multiple block of duplpicate code is exactly what I DON'T want. Having said that, do you have an alternate solution?

                If it's not broken, fix it until it is

                E 1 Reply Last reply
                0
                • K Kevin Marois

                  Can't use an interface because most of this code is already in place. Have to work with what I have. However, I think this will do it:

                  public partial class Form1 : Form
                  {
                  T DataItem;
                  Type type = typeof(T);

                  public Form1()
                  {
                      InitializeComponent();
                  
                      var DistrictId = 10;
                      DataItem = (T)Activator.CreateInstance(typeof(T), DistrictId);
                  
                      setProperty("Name", "The Name");
                      setProperty("LinkedToBilling", true);
                      setProperty("BillingStartDate", new DateTime(2012, 01, 15));
                  }
                  
                  private void setProperty(string PropertyName, T Value)
                  {
                      var prop = DataItem.GetType().GetProperty(PropertyName);
                  
                      if (prop != null)
                      {
                          type.GetProperty(PropertyName).SetValue(DataItem, Value, null);
                      }
                  }
                  

                  }

                  This will allow me to attempt to set a property. Remember that in this case most of the properties exist on both objects. But this code allows me to not have multiple IF blocks. I think it's clean, and it solved the issue.

                  If it's not broken, fix it until it is

                  C Offline
                  C Offline
                  Clifford Nelson
                  wrote on last edited by
                  #10

                  You can also define something a dynamic, thus solve the problem. Also, you "should" go back and fix the code as just good coding practice. All you have to do is define the interface, and then find all classes that work with the form and add the interface. It will inprove preformace since eliminate need to use reflection.

                  1 Reply Last reply
                  0
                  • K Kevin Marois

                    I'm refactoring a WinForms project. I have 2 forms that do the same thing, except the data entities passed in are slightly different, so the guy who wrote them decided to duplicate the forms instead of making one form that works for both. So I'm refactoring them. Assume I have these 2 entites:

                    public class Entity1
                    {
                    public string SomeProperty { get; set; }
                    public string Name { get; set; }
                    }
                    public class Entity2
                    {
                    public string SomeProperty { get; set; }
                    public string Caption { get; set; }
                    }

                    In the CTOR of the form I have:

                    public partial class Form1 : Form
                    {
                    T entity;

                    public Form1()
                    {
                        InitializeComponent();
                    
                        entity = (T)Activator.CreateInstance(typeof(T));
                    
                    }
                    

                    }

                    The problem is I now need to set properties on the object passed in. In most cases the 2 objects have the same name properties, but ther are differences. What is the right way to work with this object? Seems like I have no choice but to cast. Thanks

                    If it's not broken, fix it until it is

                    P Offline
                    P Offline
                    PIEBALDconsult
                    wrote on last edited by
                    #11

                    If the classes aren't common enough then you can't. And I'd pass an instance into the Form's constructor if I could.

                    public interface IX { ... }
                    public class X0 : IX { ... }
                    public class X1 : IX { ... }

                    public class MyForm
                    {
                    private IX x ;
                    public MyForm ( IX X ) { ... }
                    }

                    IX x = new X0 ( ... ) ;
                    MyForm f = new MyForm ( x ) ;

                    1 Reply Last reply
                    0
                    • K Kevin Marois

                      It solves what I'm trying to accomplish. Lines of code, prettyiness, ect, are not the prime concern. I'm trying to make a form work for more than one entity. Added multiple block of duplpicate code is exactly what I DON'T want. Having said that, do you have an alternate solution?

                      If it's not broken, fix it until it is

                      E Offline
                      E Offline
                      Ennis Ray Lynch Jr
                      wrote on last edited by
                      #12

                      I wouldn't use it but you can use the wrapper pattern below. It isn't elegant, but is a way to handle what you want without changing the underlying objects using interfaces, which really is probably the best solution.

                      public class Wrapper{
                      private Object mObject;
                      public string Name{
                      get{
                      string result = null;
                      if(mObject is SomeTypeIRecognize){
                      result = ((SomeTypeIRecognize)mObject).Name;
                      }
                      return result;

                          }
                      }
                      
                      public Wrapper(object o){mObject = o;}
                      

                      }

                      Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

                      K 1 Reply Last reply
                      0
                      • E Ennis Ray Lynch Jr

                        Why bother with generics if you can't use them? You are better off doing things in a straight forward manner twice, than once in a non-obvious manner.

                        setProperty("Name", "The Name");
                        setProperty("LinkedToBilling", true);
                        setProperty("BillingStartDate", new DateTime(2012, 01, 15));

                        May look like a nice, elegant solution, until you realize that

                        setProperty("Name", "The Name");
                        setProperty("LinkedToBiling", true);
                        setProperty("BillingStartDate", new DateTime(2012, 01, 15));

                        doesn't give a compiler error.

                        Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

                        C Offline
                        C Offline
                        Clifford Nelson
                        wrote on last edited by
                        #13

                        I have to agree. There appears to be no reason to use generics.

                        1 Reply Last reply
                        0
                        • K Kevin Marois

                          I'm refactoring a WinForms project. I have 2 forms that do the same thing, except the data entities passed in are slightly different, so the guy who wrote them decided to duplicate the forms instead of making one form that works for both. So I'm refactoring them. Assume I have these 2 entites:

                          public class Entity1
                          {
                          public string SomeProperty { get; set; }
                          public string Name { get; set; }
                          }
                          public class Entity2
                          {
                          public string SomeProperty { get; set; }
                          public string Caption { get; set; }
                          }

                          In the CTOR of the form I have:

                          public partial class Form1 : Form
                          {
                          T entity;

                          public Form1()
                          {
                              InitializeComponent();
                          
                              entity = (T)Activator.CreateInstance(typeof(T));
                          
                          }
                          

                          }

                          The problem is I now need to set properties on the object passed in. In most cases the 2 objects have the same name properties, but ther are differences. What is the right way to work with this object? Seems like I have no choice but to cast. Thanks

                          If it's not broken, fix it until it is

                          L Offline
                          L Offline
                          Lost User
                          wrote on last edited by
                          #14

                          Right-click the "Caption" property, choose "Refactor / Rename"?

                          Bastard Programmer from Hell :suss: if you can't read my code, try converting it here[^]

                          K 1 Reply Last reply
                          0
                          • K Kevin Marois

                            I'm refactoring a WinForms project. I have 2 forms that do the same thing, except the data entities passed in are slightly different, so the guy who wrote them decided to duplicate the forms instead of making one form that works for both. So I'm refactoring them. Assume I have these 2 entites:

                            public class Entity1
                            {
                            public string SomeProperty { get; set; }
                            public string Name { get; set; }
                            }
                            public class Entity2
                            {
                            public string SomeProperty { get; set; }
                            public string Caption { get; set; }
                            }

                            In the CTOR of the form I have:

                            public partial class Form1 : Form
                            {
                            T entity;

                            public Form1()
                            {
                                InitializeComponent();
                            
                                entity = (T)Activator.CreateInstance(typeof(T));
                            
                            }
                            

                            }

                            The problem is I now need to set properties on the object passed in. In most cases the 2 objects have the same name properties, but ther are differences. What is the right way to work with this object? Seems like I have no choice but to cast. Thanks

                            If it's not broken, fix it until it is

                            J Offline
                            J Offline
                            jschell
                            wrote on last edited by
                            #15

                            Kevin Marois wrote:

                            so the guy who wrote them decided to duplicate the forms instead of making one form that works for both. So I'm refactoring them.

                            Obviously a good decision by that person because they are in fact different. The fact that there seem to be common components between them is NOT sufficient reason to assume that they are the same. As an example the fact that Word and Visual Studio both allow me to type text doesn't mean that those two code bases should be merged.

                            Kevin Marois wrote:

                            What is the right way to work with this object?

                            The right way is to re-assess the decision to combine them in the first place. Nothing you have posted here suggests that they should be combined. And in fact what has been posted would suggest that they should NOT be combined. Of course maybe there is some other factor that makes it obvious.

                            K 1 Reply Last reply
                            0
                            • J jschell

                              Kevin Marois wrote:

                              so the guy who wrote them decided to duplicate the forms instead of making one form that works for both. So I'm refactoring them.

                              Obviously a good decision by that person because they are in fact different. The fact that there seem to be common components between them is NOT sufficient reason to assume that they are the same. As an example the fact that Word and Visual Studio both allow me to type text doesn't mean that those two code bases should be merged.

                              Kevin Marois wrote:

                              What is the right way to work with this object?

                              The right way is to re-assess the decision to combine them in the first place. Nothing you have posted here suggests that they should be combined. And in fact what has been posted would suggest that they should NOT be combined. Of course maybe there is some other factor that makes it obvious.

                              K Offline
                              K Offline
                              Kevin Marois
                              wrote on last edited by
                              #16

                              jschell wrote:

                              Obviously a good decision by that person because they are in fact different.
                               
                              The fact that there seem to be common components between them is NOT sufficient reason to assume that they are the same. As an example the fact that Word and Visual Studio both allow me to type text doesn't mean that those two code bases should be merged.

                              This is an entirely stupid argument. You're saying it's ok to have 2 entirely duplicate forms and their code becuase the data they work with is different.

                              jschell wrote:

                              The right way is to re-assess the decision to combine them in the first place. Nothing you have posted here suggests that they should be combined. And in fact what has been posted would suggest that they should NOT be combined.

                              Again, same form, same code, different data - There is NO good reason to have 2 identical forms.

                              If it's not broken, fix it until it is

                              J 1 Reply Last reply
                              0
                              • E Ennis Ray Lynch Jr

                                I wouldn't use it but you can use the wrapper pattern below. It isn't elegant, but is a way to handle what you want without changing the underlying objects using interfaces, which really is probably the best solution.

                                public class Wrapper{
                                private Object mObject;
                                public string Name{
                                get{
                                string result = null;
                                if(mObject is SomeTypeIRecognize){
                                result = ((SomeTypeIRecognize)mObject).Name;
                                }
                                return result;

                                    }
                                }
                                
                                public Wrapper(object o){mObject = o;}
                                

                                }

                                Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

                                K Offline
                                K Offline
                                Kevin Marois
                                wrote on last edited by
                                #17

                                That is exaclty what I'm trying to avoid - lots of IF blocks all over the place. The generic & reflection code I posted will work fine.

                                If it's not broken, fix it until it is

                                1 Reply Last reply
                                0
                                • L Lost User

                                  Right-click the "Caption" property, choose "Refactor / Rename"?

                                  Bastard Programmer from Hell :suss: if you can't read my code, try converting it here[^]

                                  K Offline
                                  K Offline
                                  Kevin Marois
                                  wrote on last edited by
                                  #18

                                  Um, whaaa?

                                  If it's not broken, fix it until it is

                                  L 1 Reply Last reply
                                  0
                                  • K Kevin Marois

                                    Um, whaaa?

                                    If it's not broken, fix it until it is

                                    L Offline
                                    L Offline
                                    Lost User
                                    wrote on last edited by
                                    #19

                                    public class Entity1
                                    {
                                    public string SomeProperty { get; set; }
                                    public string Name { get; set; }
                                    }
                                    public class Entity2
                                    {
                                    public string SomeProperty { get; set; }
                                    public string Name { get; set; }
                                    }

                                    Looks like the same two classes to me. What did I miss?

                                    Bastard Programmer from Hell :suss: if you can't read my code, try converting it here[^]

                                    K 1 Reply Last reply
                                    0
                                    • L Lost User

                                      public class Entity1
                                      {
                                      public string SomeProperty { get; set; }
                                      public string Name { get; set; }
                                      }
                                      public class Entity2
                                      {
                                      public string SomeProperty { get; set; }
                                      public string Name { get; set; }
                                      }

                                      Looks like the same two classes to me. What did I miss?

                                      Bastard Programmer from Hell :suss: if you can't read my code, try converting it here[^]

                                      K Offline
                                      K Offline
                                      Kevin Marois
                                      wrote on last edited by
                                      #20

                                      You missed that these are data entites that are both passed to the same form. The code in the forms is identical, except where the data is concerned. There's no good reason to have 2 forms.

                                      If it's not broken, fix it until it is

                                      L 1 Reply Last reply
                                      0
                                      • K Kevin Marois

                                        You missed that these are data entites that are both passed to the same form. The code in the forms is identical, except where the data is concerned. There's no good reason to have 2 forms.

                                        If it's not broken, fix it until it is

                                        L Offline
                                        L Offline
                                        Lost User
                                        wrote on last edited by
                                        #21

                                        I see. And you need to set them only once? I mean, you could expose two properties on the form, used to set the data. If the code treats them as being identical, then why not assign those two strings?

                                        Bastard Programmer from Hell :suss: if you can't read my code, try converting it here[^]

                                        1 Reply Last reply
                                        0
                                        • K Kevin Marois

                                          I'm refactoring a WinForms project. I have 2 forms that do the same thing, except the data entities passed in are slightly different, so the guy who wrote them decided to duplicate the forms instead of making one form that works for both. So I'm refactoring them. Assume I have these 2 entites:

                                          public class Entity1
                                          {
                                          public string SomeProperty { get; set; }
                                          public string Name { get; set; }
                                          }
                                          public class Entity2
                                          {
                                          public string SomeProperty { get; set; }
                                          public string Caption { get; set; }
                                          }

                                          In the CTOR of the form I have:

                                          public partial class Form1 : Form
                                          {
                                          T entity;

                                          public Form1()
                                          {
                                              InitializeComponent();
                                          
                                              entity = (T)Activator.CreateInstance(typeof(T));
                                          
                                          }
                                          

                                          }

                                          The problem is I now need to set properties on the object passed in. In most cases the 2 objects have the same name properties, but ther are differences. What is the right way to work with this object? Seems like I have no choice but to cast. Thanks

                                          If it's not broken, fix it until it is

                                          D Offline
                                          D Offline
                                          dbaseman
                                          wrote on last edited by
                                          #22

                                          The best way to do this is to create an interface that encapsulates the common properties of your entities:

                                          public interface IEntity
                                          {
                                          string SomeProperty { get; set; }
                                          }

                                          public interface IAnotherInterface
                                          {
                                          string Name { get; set; }
                                          }

                                          Each entity can inherit multiple interfaces, depending on how you want it set up:

                                          public class Entity1 : IEntity, IAnotherInterface
                                          {
                                          public string SomeProperty { get; set; }
                                          public string Name { get; set; }
                                          }

                                          If every entity has a certain interface, then you can require it in the Form definition:

                                          public partial class Form1 : Form
                                          where T : IEntity

                                          Finally, cast to the interfaces to set properties. If only some entities implement a given interface, check first.

                                          void SetSomeProperties()
                                          {
                                          (entity as IEntity).SomeProperty = "foo";
                                          if (entity is IAnotherInterface)
                                          {
                                          (entity as IAnotherInterface).Name = "bar";
                                          }
                                          }

                                          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