public static Type FinalType(this DataTemplate dataTemplate) { return(dataTemplate.Get(() => { var dataType = (Type)dataTemplate.DataType; if (dataTemplate.GenericArgument() == null) { return dataType; } if (dataTemplate.GenericArgumentInnerArgument() == null) { return dataType.CreateGenericType(dataTemplate.GenericArgument()); } return dataType.CreateGenericType( dataTemplate.GenericArgument().CreateGenericType( dataTemplate.GenericArgumentInnerArgument())); })); }