C#: Рекурсивные функции с Лямбдами

Самый простой способ - установить рамку вашего UIImageView и установить contentMode в один из вариантов изменения размера.

Или вы можете использовать этот служебный метод, если вам действительно нужно изменить размер изображения:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    //UIGraphicsBeginImageContext(newSize);
    // In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
    // Pass 1.0 to force exact pixel size.
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

Пример использования:

#import "MYUtil.h"
…
UIImage *myIcon = [MYUtil imageWithImage:myUIImageInstance scaledToSize:CGSizeMake(20, 20)];
27
задан Andreas Grech 7 July 2009 в 01:24
поделиться

3 ответа

Этот конкретный стиль функции не поддерживается C # как однострочное объявление. Вы должны разделить объявление и определение на 2 строки

Func<int, int> fac = null;
fac = n => (n <= 1) ? 1 : n * fac(n - 1);
45
ответ дан 28 November 2019 в 04:33
поделиться

Ну боже, если бы вы просто набрали «почему рекурсивная лямбда вызывает ошибку определенного присваивания?» в какую-нибудь поисковую систему, вы бы нашли ответ в моей статье на эту тему.

: -)

http://blogs.msdn.com/ericlippert/archive/2006/08/18/why- действительно-рекурсивная-лямбда-причина-ошибка-определенного-присвоения.aspx

15
ответ дан 28 November 2019 в 04:33
поделиться

Сначала вам нужно будет создать fac и назначить его позже (что довольно нефункционально, поскольку зависит от множественного назначения) или использовать так называемые Y-комбинаторы .

Пример:

delegate Func<TIn, TOut> FixedPointFunction<TIn, TOut>(Func<TIn, TOut> f);

static Func<T, TRes> Fix<T, TRes>(FixedPointFunction<T, TRes> f) {
    return f(x => Fix(f)(x));
}

static void Main(string[] args) {

    var fact = Fix<int, int>(f => x => (x <= 1) ? x : x * f(x - 1));

    Console.WriteLine(fact(5));            
}

Но учтите, что это может быть трудно прочитать / понять.

11
ответ дан 28 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: