C# 添加到类中

C# 添加到类中,c#,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 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,向现有产品添加产品权限的最佳方法是什么?

我假设您有一个IEnumerable,否则您可以直接更改产品

您可以在多个上使用FirstOrDefault或SingleOrDefaultthrows exception,根据给定的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"});
}

因为您使用的是列表,所以没有快速查找的好方法-您应该切换到字典

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

不知道,也许你在找像Find这样的东西


你一行就可以做到

我会这样做的。我不知道这是不是最好的

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);
    }
}

在上述解决方案中,您不需要在要添加权限的每一位代码中都检查null List。您将只在一个地方拥有它…

假设您有一个公司对象和一个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);

这里没有足够的细节来回答你的问题。您是在问如何通过ID查找产品吗?产品存放在哪里?它们在数据库中吗?你在用ORM吗?你已经试过什么了?没有最好的方法,只有一种方法可以提供给你如何设置:通过逐个搜索产品找到产品并添加权限。您希望得到什么样的答案?最佳方式、最佳面向对象方式或最佳CPU性能是什么意思?
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);
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);