使用扩展方法自动转换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());
问题:我是不是走得太远了,或者这看起来像是将扩展方法与隐式操作符结合起来的合理使用?
如果您决定继续这样做,我建议您不要使用扩展方法。正如其他人所说,扩展方法的主要用途是在没有源代码的情况下。在您的示例中,可以用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"之间的区别。
还有验证值的更复杂的问题。转换为整数只是第一步。您还需要确保输入的数字在预期范围内。
如果你把这些需求放在一起,写一些复杂的代码来给你一个文本框的值的整数表示的想法——如果它是一个有效的整数——似乎比它的价值更多的工作。