【问题标题】:Pass a data structure to a function and access the fields of the data structure like an array in C#将数据结构传递给函数并像 C# 中的数组一样访问数据结构的字段
【发布时间】:2011-07-21 04:51:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您能否提供一些有关您的字段、访问权限等的示例?
  • Vikyboss,这是你第四次问同样的问题了。请停止。您的示例副本:stackoverflow.com/questions/6750265/…
  • @AresAvatar 这实际上不是同一个问题。当我第一次问它时,人们说不是 struct 使用数组。我使用了数组,但问题是:stackoverflow.com/questions/6767555/…。有人要求我重新发布所有细节。这次我明确表示它可以是任何类型,但可以分组。
  • Vikyboss,肯定是同一个问题。每次您询问如何使用数组覆盖一组属性或值时。
  • 我在按照人们建议的方式做事时发现了问题。这就是为什么我发布这个并明确说明它可以是任何类型并使用索引进行访问和修改的原因。访问和修改不一定是数组。在使用数组方式时,创建自定义类型的数组是一个问题。所以为了找出除了可以做的任何事情之外,我问了这个问题。我明白你的观点是重复的,但每次我问他们时我都会提出这个问题,而忽略了不必要的细节和界限。

标签: c# data-structures pass-by-reference


【解决方案1】:

您可以使用对象列表:

var list = new List<object>();
list.Add("strings are cool!");
list.Add(42);

// ...

var objByIndex = list[1];        // 42

但是,如果您这样做,您将失去 C# 强类型的所有优势。我建议使用具有明确定义的强类型属性的类,除非你真的需要一些通用的东西(你事先对属性的类型一无所知)。

【讨论】:

    【解决方案2】:

    要通过引用将参数传递给方法,可以使用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 的唯一原因是该方法正在创建对象的实例。如果对象已经创建,则不需要通过引用传递。

    【讨论】:

      【解决方案3】:

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

      这真的取决于你所说的数据结构是什么意思。您是在谈论您在 EF 中创建的实际对象或数据集中的数据行吗?

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

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

      【讨论】:

        猜你喜欢
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        相关资源
        最近更新 更多