我定义了一个类:

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

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

20回复

C#中的部分类

在webforms / winforms生成的代码场景之外是否有很好的使用部分类? 或者这个功能基本上是支持吗?
10回复

C#部分类出错

我使用部分类来分割2个文件之间的一些功能,但我收到一个错误。 我究竟做错了什么? A1.cs: A2.cs:
5回复

C#部分类

我目前有一个多个项目的解决方案,大多使用相同的类。 因此,在我看来,在解决方案中添加包含这些类的类库是一个好主意,而不是在每个项目中重复该类。 但是,我所拥有的一个项目需要一些特定于该项目的类的其他属性,并且不会在其他任何地方使用。 结果,我认为我应该使用部分类来添加这些属性。 所以
4回复

在C#中创建部分类

我是学生,我不知道什么是partial class 。 以下代码属于部分类 我自动创建了分部类:
2回复

使用部分类在C#中模拟C ++友谊

我有以下情况: 我需要创建一个树形结构,该结构一旦实例化,就是不可变的。例如,考虑一个列表方法列表。 问题是在构建期间,我需要能够插入节点。 因此,我需要某种私有接口,允许插入节点,而此结构的公共接口仅允许检索节点。 我尝试了这个: 与此问题(除了继续的有所hackysh看T
8回复

C#:如何为部分类中的属性设置默认值?

我对C#很新,所以请耐心等待...... 我正在实现一个部分类,并希望添加两个属性,如下所示: 我想初始化两个数据成员: IsSomething为True , SomeList为new List<string>() 。 通常我会在构造函数中执行它,但是因为它是一个部分
1回复

在部分类中引用方法时,C#编译失败

建立C#专案时,我目前收到CS1061错误。 此错误仅发生在我的代码中非常特定的位置。 错误CS1061描述: 'type' does not contain a definition for 'member' and no extension method 'name' accepti
2回复

关于C#部分类可访问性

我对C#中的局部类有疑问 在这张照片中,我有一个领域模型。 我已将this(DomainModelLib)添加到客户端应用程序和仓库应用程序中。 存储库应用程序使用此域模型类作为“ DbSet”,并从数据库中获取数据。 如您所见,在模型局部类中创建了实境。 我将模型引用到客
1回复

使用C#中的部分类将WinForm的某些控件移至另一个WinForm

我有一个WinForm,它有很多面板,每个面板都有很多控件,这使得处理该表单的设计变得非常困难,如何将每个面板移动到新表单并在运行时将所有面板返回到主表单? 有什么帮助吗? 提前致谢
1回复

实例化部分类:ASP.NET C#中的页面类型

下面是我要完成的有关实例化部分类的示例,以尝试从单个.aspx页使用多个类(及其方法)。 login.aspx: Web_Code / SessionHandler.cs: Web_Code / LoginService.cs: Web_Code / Logon