【问题标题】:Can I access a class that has a collection from that collection?我可以访问具有该集合中的集合的类吗?
【发布时间】:2014-06-25 08:17:17
【问题描述】:

我有一个 A 类,它有一个 B 类的集合。是否可以从该集合中 B 类的实例访问 A 类?

Class A
{
    public string Something { get; set; }
    List<B> collection = new List<b>();
    public void Add(B b)
    {
        collection.Add(b);
    }
}

Class B
{
    public int Num { get; set; }
}

static void Main(string[] args)
{
    B b = new B();
    b.Num = 5;

    A a = new A();
    a.Something = "Hello";
    a.Add(b);
}

有没有办法从对象 b 访问字符串 a.Something?

【问题讨论】:

  • 你为什么要这个?

标签: c# collections


【解决方案1】:

B 需要包含对其容器 A 的引用。所以像这样:

Class B
{
    public int Num { get; set; }
    public A Container { get; set; }
}

然后在A中的Add()方法中:

public void Add(B b)
{
        collection.Add(b);
        b.Container = this;
}

假设 B 只能添加到 A 的单个实例。否则您需要使用集合(例如列表)并在添加/删除时相应地更新它。

【讨论】:

    【解决方案2】:

    通过以下更改,这是可能的;但请注意,这根本没有意义。

    Class A
    {
        public string Something { get; set; }
        List<B> collection = new List<b>();
        public void Add(B b)
        {
            b.Master = this;
            collection.Add(b);        
        }
    }
    
    Class B
    {
        public A Master {get; set;}
        public int Num { get; set; }
    }
    
    static void Main(string[] args)
    {
        B b = new B();
        b.Num = 5;
    
        A a = new A();
        a.Something = "Hello";
        a.Add(b);
        Console.Writeline(b.Master.Something);
    }
    

    【讨论】:

    • 我也首先想到了这个解决方案,但它有很大的缺陷。考虑创建两个A 对象并为每个对象添加一个B 对象。在这种情况下,B 将仅包含对最后添加的引用。因此,您要么需要List&lt;A&gt; Masters,要么重新考虑应用程序的设计并从A 访问Something。我什至没有考虑删除B 场景
    【解决方案3】:

    Is there any way to access string a.Something from object b?

    没有。你不能。

    【讨论】:

    • 我没有投反对票,但尽管有他们自己描述的问题,但这个问题有解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2013-02-20
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多