gpt4 book ai didi

c# - 如何将 "path"传递给 C# 中的对象成员?

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:29 25 4
gpt4 key购买 nike

说我有

public class family
{
public person father;
public person mother;
public person[] child;
}

public class person
{
public string name;
public int age;
}

我想做的是向家庭添加一个功能,允许我指定我希望将新人保存到的位置。

如果有 C,我会传递一个指向 person 的指针,这样我就可以将它指向一个新的 person,但我对 C# 有点陌生,不知道在这里做什么。所以我希望它看起来像这样:

public void SavePerson(int newAge, string newName, ??? location)
{
person addMe = new person();
addMe.age = newAge;
addMe.name = newName;
location = addMe;
}

我不想改变location之前的内容。如果它曾经指向 Frank,我想让 Frank 保持原来的样子,我只希望它现在指向 John(因为其他东西可能仍然指向 Frank)

我需要这个的原因是因为我有一个比这复杂得多的接口(interface)和类。但是有一个类我需要创建并保存很多(它出现在一个大型 NHibernate 创建的对象中),为了简单起见,我想将它合并到一个函数中。

最佳答案

惯用的 C# 做事方式是简单地返回新对象:

public Person CreatePerson(int age, string name)
{
Person person = new Person();
person.Age = age;
person.Name = name;
return person;
}

用法:

family.Children[0] = CreatePerson(11, "Frank");
family.Children[1] = CreatePerson(15, "John");

或者,您可以将 Person[] 和一个索引传递给该方法:

public void SavePerson(int age, string name, Person[] persons, int index)
{
persons[index] = new Person();
persons[index].Age = age;
persons[index].Name = name;
}

用法:

SavePerson(11, "Frank", family.Children, 0);
SavePerson(15, "John", family.Children, 1);

但我不确定您为什么要将此职责委托(delegate)给您的工厂方法。


如果你真的想通过引用操作变量内容,你可以使用 refout 关键字:

public void SavePerson(int age, string name, out Person person)
{
person = new Person();
person.Age = age;
person.Name = name;
}

用法:

SavePerson(11, "Frank", out family.Children[0]);
SavePerson(15, "John", out family.Children[1]);

参见:Parameter passing in C#

参见:When is using the C# ref keyword ever a good idea?


但为什么不简单地使用对象和集合初始化器呢?

Person mom = new Person { Age = 41, Name = "Martha" };
Person dad = new Person { Age = 43, Name = "Dan" };

Family family = new Family(mom, dad)
{
new Person { Age = 11, Name = "Frank" },
new Person { Age = 15, Name = "John" },
};

参见:Object and Collection Initializers

关于c# - 如何将 "path"传递给 C# 中的对象成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com