首页 > 解决方案 > C# 泛型类的字典

问题描述

我正在尝试在 C# 中创建遗传算法,但我想将基因分成类(染色体)

基本上我有一个定义为的 DNA 类

public class DNA<T> { public T[] Genes { get; private set; } }

所以我可以拥有 double、bool、int 等类型的基因...

然后我想将染色体定义为

class Chromosome
{
    Dictionary<string, DNA<T>> chromosomes;
}

所以我可以在染色体上添加多种 DNA 类型,比如

chromosomes.add("brain", new DNA<double>(...));
chromosomes.add("traits", new DNA<bool>(...));
chromosomes.add("body", new DNA<int>(...));

字典值应该是object还是应该创建一个IDNA到 DNA 类的接口来保存该对象,然后在每次需要时对其进行转换?或者有更简单/最好的方法来做到这一点?谢谢!

标签: c#genericsgeneric-programminggeneric-list

解决方案


对于您编写的多种基因,您可以使用接口/抽象类。

对于数据访问而不是强制转换,您可以编写一个简单的方法GetDNAOfType

using System;
using System.Collections.Generic;
using System.Linq;

public class Chromosome
{
   Dictionary<string, DNA> chromosomes = new Dictionary<string, DNA>();

   public IEnumerable<DNA<T>> GetDNAOfType<T>()
   {
      return chromosomes.Values.OfType<DNA<T>>();
   }

   public void AddDNA(string key, DNA dna)
   {
      if (chromosomes.ContainsKey(key))
         chromosomes[key] = dna;
      else
         chromosomes.Add(key, dna);
   }
}
public abstract class DNA
{
}

public class DNA<T> : DNA
{
   public T[] Genes { get; private set; }
}

推荐阅读