我定义了一个类:

public class Sample{
    public string name {get;set;}
    public int price {get;set}
}

然后

 Sample sampleA = new Sample();
 sampleA.name = "test";

  Sample sampleB = new Sample();
  sampleB.price = 100;

我这样做是因为我将JSONed sampleA和JSONed sampleB保存到Azure表,以呈现完整的示例对象。 在其他代码中,有时只需要名称,有时只需要价格,所以我只需要提取每次需要的数据。 当然,在实际代码中,样本的结构要复杂得多。

我的问题是 :是否有任何简单的方法可以做到:

  Sample sampleC = sampleA + sampleB;

和sampleC应包含:

 sampleC.name = "test";
  sampleC.price = 100;

===============>>#1 票数:6

这实际上与部分类无关。 部分类是单个类,它在“地理上”声明多于一个文件。

File1.cs:

public partial class File { public string Prop2 { get;set; } }

File2.cs:

public partial class File { public int Prop1 { get;set; } }

这将在编译时产生:

public partial class File 
{
     public string Prop2 { get;set; } 
     public int Prop1 { get;set; } 
}

对于你的要求。
没有这样的方法,它将两个不同的实例合二为一。 你应该自己写。

更新:
你可能会问,为什么没有这样的方法。 但它如何处理如下情况:

Sample sampleA = new Sample();
sampleA.name = "test";
sampleA.price = 200;

Sample sampleB = new Sample();
sampleB.price = 100;

Sample sampleC = sampleA + sampleB; // what would be the value of price here: from sampleA or sampleB?

===============>>#2 票数:4 已采纳

你怎么过载+ operator

    public static Sample operator +(Sample left, Sample right)
    {
        left.price = right.price;
        return left;
    }

===============>>#3 票数:2

您可以通过重载类上的+运算符来实现此目的。 像这样的东西

public static Sample operator +(Sample sampleA, Sample sampleB){
    return new Sample() { Name = sampleA.Name, Price = sampleB.Price };
}

===============>>#4 票数:0

正如Eric Yin在他的回答中所提到的部分类是一个不合适的名称,因为它完全指的是其他东西。

可以在两个或多个源文件上拆分类或结构,接口或方法的定义。 每个源文件都包含类型或方法定义的一部分,并且在编译应用程序时将所有部分组合在一起。

首先,您应该考虑使用加法运算符是否是概念上的好选择。 产生的对象是明显的/不明确的是什么?

乍一看,我会通过使用所有非空值来解释您正在寻找的行为。 当两个对象具有非空值的相同字段时,您将如何处理?

考虑到这是你所追求的行为,你可以像Gabe的回答一样重载加法运算符 当您的类/结构只包含可空值时,您可以让添加将所有值从一个对象复制到另一个对象,其中一个包含值,另一个包含null值。 当两个对象都包含值时,我会抛出异常。

最后一点,请反思您最终必须如何实现此行为。 我猜你可以解决一个潜在的设计问题 您可能不应该使用仅存储部分数据的对象。


作为另一种选择,C#中的新动态关键字也会浮现在脑海中。 也可能值得检查一下。

  ask by Eric Yin translate from so

未解决问题?本站智能推荐: