c# - 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 类的接口来保存该对象,然后在每次需要时对其进行转换?或者有更简单/最好的方法来做到这一点?谢谢!
解决方案
对于您编写的多种基因,您可以使用接口/抽象类。
对于数据访问而不是强制转换,您可以编写一个简单的方法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; }
}
推荐阅读
- c# - .NET Core 自定义服务器证书 CA
- javascript - Vuejs自定义插件getelementbyid不起作用
- scala - 如何在不设置的情况下将映射键转换为字符串?
- ios - FRC 内容更改时的 UITableView 异常
- jquery - jQuery Array.map 和 Object.keys() 映射对象数组的键
- java - 带有 RetroFit 的致命异常 OkHttp 调度程序
- c# - linq 中的 DateTime.ToString("MM/dd/yyyy") 抛出错误
- api - 查询 graph.microsoft.com 的日历事件时 HTTP 500 过多
- html - ion-scroll 显示滚动条
- python - 如何将变量标识符设置为另一个变量的内容?