繁体   English   中英

如何将两个相同的类对象合并为一个?

[英]how to combine two same class object into one?

我做了一个名为Phrases的类,其中包括一些字符串和整数。

public class Phrases {
    public class PhraseData {
        public string text { get; set; }
        public string htmlColor { get; set; }
        public int position { get; set; }
    }

    public PhraseData intro { get; set; }
    public PhraseData credit { get; set; }
    public PhraseData general { get; set; }
    /* and more PhraseDatas... */
}

/* ... */

而且我有两个json文件。 一个仅具有PhraseData的文本数据,另一个仅具有除文本数据之外的每个数据。 所以如果我反序列化这些json文件。 我将得到两个这样的短语类对象。

Phrases onlyTextFilled;
Phrases everyDataFilledExceptText;

我想将这两个类对象合并为一个。 有什么好的方法可以解决这个问题?

帮帮我!

快速又脏。 重载“ +”运算符。 对于内层阶级和主要阶层。 还添加属性以忽略属性的默认值和空值(例如,如果使用Newtonsoft.Json)。 另一个疯狂的想法,您可以使用装饰器模式。

public class Phrases
{
    public class PhraseData
    {
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, Order = 1, DefaultValueHandling = DefaultValueHandling.Ignore)]
        public string text { get; set; }

        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, Order = 2, DefaultValueHandling = DefaultValueHandling.Ignore)]
        public string htmlColor { get; set; }

        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, Order = 3, DefaultValueHandling = DefaultValueHandling.Ignore)]
        public int position { get; set; }

        public static PhraseData operator + (PhraseData pd1, PhraseData pd2)
        {
            var pd = new PhraseData();
            pd.text = (pd1.text == null) ? pd2.text : pd1.text;
            pd.htmlColor = (pd1.htmlColor == null) ? pd2.htmlColor : pd1.htmlColor;
            pd.position = (pd1.position == 0) ? pd2.position : pd1.position;
            return pd;
        }
    }

    public PhraseData intro { get; set; }
    public PhraseData credit { get; set; }
    public PhraseData general { get; set; }

    public static Phrases operator + (Phrases p1, Phrases p2)
    {
        return new Phrases() { 
            intro = p1.intro + p2.intro,
            credit = p1.credit + p2.credit,
            general = p1.general + p2.general
        };
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM