添加到课堂

时间:2013-09-05 07:50:06

标签: c#

给出以下课程

public class Company
{   
    public List<Product> Products { get; set; }
}

public class Product
{
    public Guid Id { get; set; }
    public List<ProductPermission> Permissions { get; set; }

}

public class ProductPermission
{
    public Guid Id { get; set; }
    public string Name { get; set; }

}

在知道产品ID的情况下,向现有产品添加产品权限的最佳方法是什么?

6 个答案:

答案 0 :(得分:4)

我假设您有IEnumerable<Product>,否则您可以直接更改产品。

您可以使用FirstOrDefaultSingleOrDefault(多次抛出异常)根据给定的GUID获取正确的产品。然后,您可以向列表添加权限:

Product p = products.FirstOrDefault(p => p.Id == givenID));
if(p != null)
{
    if(p.Permissions == null)
        p.Permissions = new List<ProductPermission>();
    p.Permissions.Add(new ProductPermission{ID = givenID, Name="PermissionName"});
}

答案 1 :(得分:2)

由于您使用列表,因此无法快速查找 - 您应切换到Dictionary<Guid, Product>

var perm = new ProductPermission() { Id = ..., Name = ... };
var prod = company.Products.FirstOrDefault(o => o.Id == perm.Id);
if (prod != null)
    prod.Permissions.Add(perm);

答案 2 :(得分:2)

不知道,也许你正在寻找类似Find的东西?

var product = company.Products.Find(p => p.Id == productId);
if (product != null)
    product.Permissions.Add(permission)

答案 3 :(得分:1)

这是我这样做的方式。我不知道它是否是最好的。

public class Product
{
    public Guid Id { get; set; }
    public List<ProductPermission> Permissions { get; set; }
    public void AddPermission(ProductPermission permission)
    {
        if(Permissions == null)
        {
            Permissions = new List<ProductPermission>();
        }
        Permissions.Add(permission);
    }
}

然后我会打电话给

product.AddPermission(permission);

在上面的解决方案中,您不需要在要添加权限的每一段代码中检查空列表。你只能在一个地方拥有它......

答案 4 :(得分:0)

CurrentProduct.Permissions.Add(new ProductPermission() {GuidId=System.Guid.NewGuid(), Name="HeyMega"});

你可以在一行中做到这一点!

答案 5 :(得分:0)

让我们假设您有一个Company对象和一个ProductPermission对象

Company c = new Company();
ProductPermission permission = new ProductPermission();

Product p = c.Products.Find((p)=>p.Id == id);

if (p != default(Product))
  p.Permissions.Add(permission);