protected CodonBase(IGeneticCode geneticCode, ICodonIdentifier codonIdentifier, CodonType codonType,
            IEnumerable<INucleotide> nucleotides)
        {
            this.CodonIdentifier = codonIdentifier;
            this.CodonType = codonType;
            this.Nucleotides = nucleotides as List<INucleotide> ?? nucleotides.ToList();

            if (this.Nucleotides.Count() != geneticCode.CodonLength)
                throw new GeneticCodeException("All Codons must be of the specified CodonLength in the Genetic Code.");
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="geneticCode">The IGeneticCode to which all IOrganisms in this IUniverse adhere.</param>
 public Universe(IGeneticCode geneticCode) 
     : base(geneticCode)
 {
 }
 /// <summary>
 /// Converts this ICodon to a IConvertedCodon as specified by the given ICodonConverterIdentifier.
 /// </summary>
 /// <param name="geneticCode"></param>
 /// <param name="codonConverterIdentifier"></param>
 /// <returns>The converted IConvertedCodon.</returns>
 public IConvertedCodon Convert(IGeneticCode geneticCode, ICodonConverterIdentifier codonConverterIdentifier)
 {
     return geneticCode.ConvertCodon(codon: this, codonConverterIdentifier: codonConverterIdentifier);
 }
 protected CodonBase(IGeneticCode geneticCode, ICodonIdentifier codonIdentifier, CodonType codonType,
     IEnumerable<INucleotideIdentifier> nucleotides) :
     this(geneticCode: geneticCode, codonIdentifier: codonIdentifier, codonType: codonType,
     nucleotides: nucleotides.Select(i => geneticCode.Nucleotides[i]))
 {
 }