Действительно ли возможно распаковать кортеж, не используя переменные?

У меня просто была подобная потребность, и я решил ее как это:

 public override IList SnapLines
{
    get
    {
        IList snapLines = base.SnapLines;

        MyControl control = Control as MyControl;
        if (control == null) { return snapLines; }

        IDesigner designer = TypeDescriptor.CreateDesigner(
            control.textBoxValue, typeof(IDesigner));
        if (designer == null) { return snapLines; }
        designer.Initialize(control.textBoxValue);

        using (designer)
        {
            ControlDesigner boxDesigner = designer as ControlDesigner;
            if (boxDesigner == null) { return snapLines; }

            foreach (SnapLine line in boxDesigner.SnapLines)
            {
                if (line.SnapLineType == SnapLineType.Baseline)
                {
                    snapLines.Add(new SnapLine(SnapLineType.Baseline,
                        line.Offset + control.textBoxValue.Top,
                        line.Filter, line.Priority));
                    break;
                }
            }
        }

        return snapLines;
    }
}

Этот способ, которым это на самом деле создает временного подразработчика для подуправления для обнаружения, где "реальная" базовая линия snapline.

Это казалось довольно производительным в тестировании, но если перфект становится беспокойством (и если внутреннее текстовое поле не перемещается), тогда, большая часть этого кода может быть извлечена к Инициализировать методу.

Это также предполагает, что текстовое поле является прямым ребенком UserControl. Если существуют другие влияющие на расположение средства управления в пути тогда, вычисление смещения становится немного более сложным.

11
задан ghickman 28 November 2009 в 08:54
поделиться