【发布时间】:2015-09-28 15:35:35
【问题描述】:
public class Address
{...}
public class Object1
{
public Address Address {get;set;}
}
public class Object2
{
public Address Address {get;set;}
}
public UpdateAddress(Address address)
{
address = new Address();
}
//calling
var obj1 = new Object1();
UpdateAddress(obj1.Address);
//obj1.Address 为空
我不能让我的 2 个类从具有 Address 属性的基类继承(长话短说)
我的印象是,当将对象传递给方法时,它们是通过引用进行的,如果我将该属性传递给方法,我的 obj1.Address 将有一个新的并且不为空。
如果我的假设是错误的,并且似乎是关于在这种情况下对象没有通过引用传递。
我怎样才能有一个通用方法来更新我所有对象中相同的属性(我知道我可以返回一个新的地址对象,但我更喜欢传入而不是返回)
通过T也可以做到这一点吗?
更新 - 实际代码
调用方法
bool isVendorIdFromModel = UpdateVendor(entity.ExpenseVendor, entity.ExpenseVendorId, model, isNew, context);
if (isVendorIdFromModel)
{
entity.ExpenseVendorId = model.VendorId;
}
private static bool UpdateVendor(ExpenseVendor vendor, int? entityVendorId, ExpenseBaseModel model, bool isNew, ELMSContext context)
{
if (model.VendorId.HasValue)
{
if (entityVendorId != model.VendorId)
{
return true;
}
UpdateVendorInfo(model, vendor);
}
else
{
if (isNew && !string.IsNullOrEmpty(model.VendorName))
{
vendor = new ExpenseVendor
{
...
};
context.ExpenseVendors.Add(vendor);
}
if (vendor != null)
{
UpdateVendorInfo(model, vendor);
}
}
return false;
}
private static void UpdateVendorInfo(ExpenseBaseModel model, ExpenseVendor vendor)
{
vendor.Name = model.VendorName;
vendor.Address1 = model.Address1;
vendor.Address2 = model.Address2;
vendor.City = model.City;
vendor.PostalCode = model.PostalCode?.Replace(" ", string.Empty);
vendor.ProvinceId = model.ProvinceId;
}
【问题讨论】:
-
两个类可以从同一个接口实现吗?参考 Jon yoda.arachsys.com/csharp/parameters.html 的这篇文章,对参数传递有一个很好的了解。
-
“我的印象是,当将对象传递给方法时,它们是通过引用进行的”。不,他们不是。根本不传递对象。引用按值传递。见pobox.com/~skeet/csharp/parameters.html
-
@SriramSakthivel 不幸的是他们不能,这些是实体框架类,而 Address 是一个共享表,它成为每个实体的属性
-
几乎与 Jon Skeet 使用 lambdas 删除的答案重复...stackoverflow.com/questions/1178574/…
标签: c#