我有以下代码 struct :

我有一个Population人的班级,上面列出了所有Humans个人的名单. population类也有一个包含所有现有Genes的列表.

一个Gene的 struct 存储一个ID和一个值(为简单起见,只存储一个简单的字符串).

现在我想传递Human所拥有的Gene的ID,而不是整个Gene struct 体,因为 多个Humans可以具有相同的Gene,并且这将是冗余的.

想象一下,有Genes个不同的Genes,Population个IS的大小是Genes,一个人类有5个基因. 然后,我将不得不在所有Humans个中存储总计Genes*Genes*5 Genes. 但如果我将Population中存储的所有可用Genes 的列表传递给Human,那么我只需要存储Genes个基因,无论Population有多大,Human有多少Genes.

但是,当Human只有ID时,我如何检索Human内部的Gene的值?

internal class Population
    {
        List<Human> population = new List<Human>();

        List<Gene> Genes = new List<Gene>();

        public Population() 
        {
            CreateGenes(10);
            CreatePopulation(10);
        }

        private void CreateGenes(int GeneCount)
        {
            for (int i = 0; i < GeneCount; i++)
            {
                Genes.Add(new Gene() { Id = i, Value = "abc" });
            }
        }

        private void CreatePopulation(int populationCount)
        {
            for (int i = 0; i < populationCount; i++)
            {
                population.Add(new Human() { GenID = Genes[i].Id });
            }
        }
    }

internal class Human
    {
        public int GenID;

        public string GeneValue()
        {
            // HOW DO I GET THE VALUE FROM THE LIST IN THE POPULATION?
        }
    }

public struct Gene
    {
        public int Id;
        public string Value;
    }


推荐答案

好的,只有在人类可以访问基因列表的情况下,这才能起作用.但我仍然建议在人类中存储基因,因为列表中存储的不是"对象",而是对该对象的引用.另外,你人类的GenID不允许一个人类有多个基因,因为你只有一个ID.但我仍然会try 按照你的思路来做 人口的一个小变化

public class Population{

    public static List<Gene> Genes = new List<Gene>();
    ...
}

现在你的人类阶级发生了变化


public string GeneValue()
{
    return Population.Genes.First(g =>g.Id == GenID).Value;
}

但不要罗列这样的 list ,这不是真的很好做.如果需要的话,建立一个可以访问所有基因的列表是有意义的,但我仍然建议在人类中有一个基因列表.

或者,如果从Popular调用GeneValue方法,则可以只将列表设置为参数:


public string GeneValue(List<Gene> genes)
{
    return genes.First(g =>g.Id == GenID).Value;
}

Csharp相关问答推荐

利用.NET 8中的AddStandardResilienceDeliveries和AddStandardHedgingDeliveries实现Resiliency

如何使用XmlSerializer反序列化字符串数组?

实体核心框架--HasColumnType和HasPrecision有什么不同?

为什么任务需要在内部使用ManualResetEventSlim?

Azure DEVOPS找不到定制的Nuget包

Blazor服务器端的身份验证角色

C#方法从AJAX调用接收NULL

Mongo作为.NET中Testcontainers的副本集

如何通过属性初始化器强制初始化继承记录内的属性?

异步任务导致内存泄漏

System.Text.Json .NET 8多形态语法化

用于管理System.Text.Json中的多态反序列化的自定义TypeInfoResolver

DateTime ToString()未以指定格式打印

在C#中过滤Excel文件

无法将生产环境的AppDbContext设置替换为用于集成测试的内存数据库

如何对特定异常使用Polly重试机制?

为什么我在使用有效令牌的情况下仍未获授权?

如何在C# WinForm控件中使用Windows 10/11的黑暗主题?

C#中COM对象的实际地址

PowerShell:如何[引用]数组中的元素?