public static bool HasCompatibleValueOutput(this IUnitOption option, Type inputType) { Ensure.That(nameof(inputType)).IsNotNull(inputType); foreach (var valueOutputType in option.valueOutputTypes) { if (ConversionUtility.CanConvert(valueOutputType, inputType, false)) { return(true); } } return(false); }
public bool ValidateOption(IUnitOption option) { Ensure.That(nameof(option)).IsNotNull(option); if (!NoControlInput && option.controlInputCount == 0) { return(false); } if (!SingleControlInput && option.controlInputCount == 1) { return(false); } if (!MultipleControlInputs && option.controlInputCount > 1) { return(false); } if (!NoValueInput && option.valueInputTypes.Count == 0) { return(false); } if (!SingleValueInput && option.valueInputTypes.Count == 1) { return(false); } if (!MultipleValueInputs && option.valueInputTypes.Count > 1) { return(false); } if (!NoControlOutput && option.controlOutputCount == 0) { return(false); } if (!SingleControlOutput && option.controlOutputCount == 1) { return(false); } if (!MultipleControlOutputs && option.controlOutputCount > 1) { return(false); } if (!NoValueOutput && option.valueOutputTypes.Count == 0) { return(false); } if (!SingleValueOutput && option.valueOutputTypes.Count == 1) { return(false); } if (!MultipleValueOutputs && option.valueOutputTypes.Count > 1) { return(false); } var unitType = option.unitType; if (!Normals && !unitType.HasAttribute <SpecialUnitAttribute>()) { return(false); } if (!Self && option.UnitIs <This>()) { return(false); } if (!Events && option.UnitIs <IEventUnit>()) { return(false); } if (!Literals && option.UnitIs <Literal>()) { return(false); } if (!Variables && option.UnitIs <IUnifiedVariableUnit>()) { return(false); } if (!Members && option.UnitIs <MemberUnit>()) { return(false); } if (!Nesters && option.UnitIs <INesterUnit>()) { return(false); } if (!Expose && option.UnitIs <Expose>()) { return(false); } if (!Obsolete && unitType.HasAttribute <ObsoleteAttribute>()) { return(false); } if (CompatibleInputType != null && !option.HasCompatibleValueInput(CompatibleInputType)) { return(false); } if (CompatibleOutputType != null && !option.HasCompatibleValueOutput(CompatibleOutputType)) { return(false); } return(true); }
public static bool UnitIs <T>(this IUnitOption option) { return(option.UnitIs(typeof(T))); }
public static bool UnitIs(this IUnitOption option, Type type) { return(type.IsAssignableFrom(option.unitType)); }