使用扩展方法自动转换winforms UI的文本框文本是否有任何问题?

本文关键字:文本 是否 任何 问题 UI 方法 扩展 winforms 转换 | 更新日期: 2023-09-27 18:03:02

我这样做是因为:a)我强迫自己使用较新的c#语言特性(或者我以前从未使用过的特性)b)我厌倦了每次文本框包含非字符串值

时输入转换代码。

所以我想到了:

public static class MyExt
{
    public static MyTextBox Auto(this TextBox tb)
    {
        return new MyTextBox(tb);
    }
}
public class MyTextBox
{
    private TextBox _textBox;
    public MyTextBox(TextBox t)
    {
        _textBox = t;
    }
    public static implicit operator string(MyTextBox o)
    {
        return o._textBox.Text;
    }
    public static implicit operator int(MyTextBox o)
    {
        return Convert.ToInt32(o._textBox.Text);
    }
}

如果我要传递一个文本框值需要一个int:

var a = new UnitCountsForm(campaign_NumberTextBox.Auto());

问题:我是不是走得太远了,或者这看起来像是将扩展方法与隐式操作符结合起来的合理使用?

使用扩展方法自动转换winforms UI的文本框文本是否有任何问题?

如果您决定继续这样做,我建议您不要使用扩展方法。正如其他人所说,扩展方法的主要用途是在没有源代码的情况下。在您的示例中,可以用MyTextBox内部的静态工厂方法替换扩展方法。或者干脆去掉这个想法,直接写:

var mytb = new MyTextBox(tb);

我甚至不建议这样做。我认为你写的代码是一个不必要的复杂性,最好的边际收益。

这段代码的一个问题是它没有考虑到可能出现的错误。例如,如果文本框不包含有效的整数,则隐式转换为int将失败。没有简单的方法来修改转换操作符以适应错误检查。我想你可以这样写:

public static implicit operator int(MyTextBox o)
{
    int val;
    if (int.TryParse(o_textBox.Text, out val))
    {
        return val;
    }
    return -1;
}

但是你无法分辨用户输入"-1"和用户输入"xyzzy"之间的区别。

还有验证值的更复杂的问题。转换为整数只是第一步。您还需要确保输入的数字在预期范围内。

如果你把这些需求放在一起,写一些复杂的代码来给你一个文本框的值的整数表示的想法——如果它是一个有效的整数——似乎比它的价值更多的工作。