在C#中绑定/链接的对象/类,如LINQ

Nic*_*kon 6 c# linq oop class linked-list

也许这是一个新手问题,但任何人都可以解释我是如何制作捆绑/链接类(我不知道他们的真名)?例子可以是LINQ TO XML.

当我有下面的代码:

XDocument doc = XDocument.Load("...");
XElement element = doc.Element("root");
element.SetAttribute("NewAttribute", "BlahBlah");
doc.Save("...");
Run Code Online (Sandbox Code Playgroud)

我只更改element变量(我不需要更新它,doc因为它被引用).如何创建这样的类?

[编辑]
我试过@ animaonline的代码,它的工作原理

A a = new A();
B b = a.B(0);
b.Name = "asd";
Console.WriteLine(a.Bs[0].Name); // output "asd"
Run Code Online (Sandbox Code Playgroud)

但是告诉我们上面和下面的代码有什么不同?

List<string> list = new List<string>();
list.Add("test1");
list.Add("test2");
var test = list.FirstOrDefault();
test = "asdasda";
Console.WriteLine(list[0]); // output "test1" - why not "asdasda" if the above example works???
Run Code Online (Sandbox Code Playgroud)

ani*_*ine 4

doc.Element 是一种方法,它返回对具有指定 XName 的第一个(按文档顺序)子元素的引用。

考虑这个例子:

public class A
{
    public A()
    {
        this.Bs = new List<B>();

        this.Bs.Add(new B { Name = "a", Value = "aaa" });
        this.Bs.Add(new B { Name = "b", Value = "bbb" });
        this.Bs.Add(new B { Name = "c", Value = "ccc" });
    }

    public List<B> Bs { get; set; }

    public B B(int index)
    {
        if (this.Bs != null && this.Bs[index] != null)
            return this.Bs[index];

        return null;
    }
}

public class B
{
    public string Name { get; set; }
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

用法:

A a = new A();
var refToA = a.B(0);
refToA.Value = "Some New Value";

foreach (var bs in a.Bs)
    System.Console.WriteLine(bs.Value);
Run Code Online (Sandbox Code Playgroud)

解释:

正如您所看到的,B() 方法返回对 A 类中列表项的引用,更新它也会更改 A.bs 列表中的值,因为它是完全相同的对象。