public override bool Implements(CodeType type) { SetupMeta(); foreach (var utype in type.UnionTypes()) { if (!(utype is StructInstance other && other.Variables.Length == Variables.Length)) { continue; } bool structVariablesMatch = true; for (int i = 0; i < Variables.Length; i++) { var matchingVariable = other.Variables.FirstOrDefault(v => Variables[i].Name == v.Name); if (matchingVariable == null || !((CodeType)Variables[i].CodeType).Implements((CodeType)matchingVariable.CodeType)) { structVariablesMatch = false; break; } } return(structVariablesMatch); } return(false); }