2013-08-29 2 views
-2

Примечание: ALL код рукописные так синтаксис может быть неправильно, я не знаю,Объединение объектов в C#

Я хочу, чтобы объединить два объекта частичного класса, порожденного XSD2Code инструментом, но не в состоянии выяснить, как.

Я нахожу это сообщение, которое не помогает ни How to combine a Partial Class Object in C#? как Частичный класс У меня есть сотню свойств и атрибутов. Кроме того, этот код копирует не сливаясь left.price = right.price;

Пример

Public Method_1() 
{ 
     FruitCrate fcA = new FruitCrate(); 
     fcA = Method_2() + Method_3(); 

} 

Public FruitCrate Method_2() 
{ 
FruitCrate fcB = new FruitCrate(); 
fcB.Name = .. 
fcB..... hundred of properties.. 

return fcB; 

} 

Public FruitCrate Method_3() 
{ 
FruitCrate fcC = new FruitCrate(); 
fcC.Name = .. 
fcC..... hundred of properties.. 

return fcC; 
} 

Это как частичный класс выглядеть,

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.1433")] 
    [System.SerializableAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 
    public partial class FruitCrate{ 

     private List<FruitCrate> FruitCrate; 

     private static System.Xml.Serialization.XmlSerializer serializer; 

     public FruitCrate() { 
      this.FruitCrateField = new List<FruitCrateField>(); 
     } 

     [System.Xml.Serialization.XmlArrayAttribute(Order=0)] 
     [System.Xml.Serialization.XmlArrayItemAttribute("FruitCrate", IsNullable=false)] 
     public List<FruitCrate> FruitCrate{ 
      get { 
       return this.FruitCrate; 
      } 
      set { 
       this.FruitCrateField = value; 
      } 
     } 
     //soo on it's a large auto generated class 
+0

Что вы подразумеваете под "merge"? Можете ли вы привести пример того, что вы пытаетесь сделать и каков ожидаемый результат? – David

+0

@ Добавлен пример David – Mathematics

+2

Из вашего примера, похоже, вы можете перегрузить оператор +. Так что вы могли бы «добавить» FruitCrate + FruitCrate – Justin

ответ

0

Почему бы не реализовать функцию для добавления к вам? В случае вы упоминаете выше только два пирожных, это может выглядеть следующим образом:

public static FruitCake MergeCakes(FruitCake A, FruitCake B) 
{ 
    FruitCake mergedCake = new FruitCake(); 

    // Do your merging, like for instance 

    mergedCake.Price = A.Price + B.Price; 

    return mergedCake; 
} 

Вы можете сделать свое дополнение так:

FruitCrate fcA = new FruitCake(); 
    fcA = MergeCakes(Method_2(), Method_3()); 

Если вам нужна возможность объединить большое количество торты, вы можете реализовать MergeCakes-функцию с входом списка, как, например:

public static FruitCake MergeCakes(List<FruitCake> cakes) 
{ 
    if(cakes != null) 
    { 
     FruitCake mergedCake = new FruitCake(); 

     // Do your merging, like for instance 
     foreach(var cake in cakes) 
     { 
      mergedCake.Price += cake.Price; 
     } 
    } 
    return mergedCake; 
} 

а затем сделать ваше сложение следующим образом:

FruitCrate fcA = new FruitCake(); 
    fcA = MergeCakes(new List<FruitCake>(){ Method_2(), Method_3()), Method_4(), Method_5(), ... }); 

Может показаться, что я не отвечаю непосредственно на ваш вопрос, но, по моему опыту, вам лучше держать вещи как можно более простыми как можно дольше. Таким образом, через две недели вы сможете оглянуться на свой код и все еще понимать, что происходит.

Удачи вам!

-1

Ваш вопрос не имеет ничего общего с частичными классами. Частичным классом является тот, чей код разделен между несколькими файлами.

Нет ничего «встроенного», чтобы делать то, что вы хотите. Вы можете использовать отражение, чтобы перебрать все свойства и добавить любые числовые значения вместе, но вам все равно придется учитывать разные числовые типы (нет общего способа добавления двух числовых значений, типы которых неизвестны в compile- время).

+0

Это то, что я искал, разве вы не знали об этом? http://stackoverflow.com/questions/7504280/c-sharp-merge-objects – Mathematics

+0

@ user13814: Этот пример выполняет * то же самое * как перегруженный оператор '+'. Он просто использует собственное имя метода вместо существующего оператора. – David