将数据结构传递给函数并访问数据结构的字段,就像c#中的数组一样

本文关键字:数据结构 数组 一样 就像 字段 函数 访问 | 更新日期: 2023-09-27 18:02:50

我有一组不同类型的字段,我必须将它们分组到任何数据结构中。然后我必须把它传递给一个函数并修改字段和数据结构的索引,就像数组一样。我该怎么做呢?谢谢大家。

mytype{
   int a;
   ushort b;
   string c;
}

我想传递这个数据结构来分组所有这些字段,它可以是类或结构。并将其传递给一个函数,并希望使用索引修改该实例的字段,如下所示:

void function(ref mytype G)
{
    G[1] = 1;   <= Here G.a should be set to 1
}

将数据结构传递给函数并访问数据结构的字段,就像c#中的数组一样

您可以使用对象列表:

var list = new List<object>();
list.Add("strings are cool!");
list.Add(42);
// ...
var objByIndex = list[1];        // 42
如果你这样做,你就失去了c#强类型的所有优势。我建议使用具有良好定义的强类型属性的类,除非您确实需要一些泛型的东西(在此之前您对属性的类型一无所知)。

通过引用传递参数给方法,可以使用ref关键字。所以你可以这样做:

void Method1(Class1 obj1, Class2 obj2, ref Class3 obj3)
{
   obj3 = new Class3();
   // set the fields of obj3 based on values of obj1 and obj2
}
Method1(obj1, obj2, ref obj3);

至于"使用索引修改数据结构中的字段,如数组",如果需要,可以将这些索引作为附加参数传递。要回答这个问题,我得多了解一点你在做什么。

请注意,在上面的示例中,通过引用传递obj3的唯一原因是该方法正在创建对象的实例。如果对象已经创建,则不需要通过引用传递。

修改对象是相当容易的,只要您不跨越某些边界(进程、机器、网络(机器的变体))传递它。您可以使用ref关键字传入,但在大多数情况下不是必需的。

这取决于你对数据结构的定义。您是在谈论您创建的实际对象还是数据集中的数据行,您在EF中创建的东西?

概念是一样的。如果你越过边界,你最好"重置"你的对象,而不是尝试通过引用传递。

对你的意思给出一些指导,我可以跟进更具体的信息。