【问题标题】:Can I programmatically set the object type for a DirectCast command?我可以以编程方式为 DirectCast 命令设置对象类型吗?
【发布时间】:2013-02-23 00:14:40
【问题描述】:

我正在帮助一位同事为他的应用程序的某些控件开发“包罗万象”类型的错误处理程序。他想要做的是传递有错误的对象,以及该对象的类型,例如 TextBox 或 ComboBox,然后在其处理程序中调用 DirectCast 方法以正确处理其中的 Text 属性。一般来说,该方法如下所示:

Protected Sub SpecialErrorHandler(ByVal TargetControl As Object, ByVal ControlType As String)

   MessageBox.Show("Bad Juice: " & DirectCast(TargetControl, ControlType(ObjType)).Text)

End Sub

到目前为止,任何在 DirectCast 方法中进行类型转换的尝试(因为它期望通用签名中的对象)甚至传递正确设置的 Type 对象都不起作用。

这里有任何想法,或者这是否是“铸造不能那样工作”中的一个。输入场景?

【问题讨论】:

    标签: vb.net casting directcast


    【解决方案1】:

    DirectCast() 在编译时需要一个真正的类型,所以它知道调用的结果是什么样的。您在这里所能期望的最好的结果是为您期望的每个对象转换为一个通用的基本类型。在这种情况下,您很幸运,因为您有一个相当有用的基本类型:Control

    【讨论】:

    • 我有一种预感,但想先和这里的大师交流一下。谢谢!
    【解决方案2】:

    您可以使用反射来提取属性。另外,如果您知道对象始终是 Control,为什么不将其强制转换为 Control,然后获取控件的 Text 属性?

    Control errorObject = (Control)TargetControl;
    MessageBox.Show("Error..."+errorObject.Test));
    

    (对不起C#代码,对VB不太熟悉,但应该差不多吧。)

    【讨论】:

    • 不用担心 C# 代码。我正在向他传达这方面的潜力。如果他不需要比文本字段更复杂的东西,他应该已经准备好了。谢谢!
    【解决方案3】:

    请注意,如果没有超类,如本例中的Control,那么您要查找的内容几乎与TargetControl.TextOption Strict Off 版本相同,因为直到该类才确定运行时。

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 2010-12-27
      • 1970-01-01
      • 2021-04-22
      • 2013-08-31
      • 1970-01-01
      • 2011-02-24
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多