【问题标题】:How to use CStr to convert generic parameter to String?如何使用 CStr 将泛型参数转换为字符串?
【发布时间】:2015-01-15 10:08:03
【问题描述】:

我写了一个通用的Sub 并且需要将输入值转换为String 以将它们转换为TextBox(在这种情况下是一个PowerPoint 文本框)。这看起来像:

Sub InsertValueIntoTextbox(Of t)(ByVal sldNr As Integer, ByVal tbName As String, ByVal valueToInsert As T)
    _pptSld = _pptPre.Slides(sldNr)
    _pptSld.Shapes(tbName).TextFrame.TextRange.Text = CStr(valueToInsert)
End Sub

我的问题是它给了我这个编译器错误:

t的值不能转成字符串

我尝试了CStr(正如您在 sn-p 中看到的那样),但这也无济于事。谁能帮我让它工作并告诉我为什么我不能将T 转换为CStr

【问题讨论】:

  • 如果您总是要将valueToInsert 转换为字符串,为什么还要使用泛型方法呢?为什么不直接将参数设为字符串?

标签: vb.net string generics type-conversion


【解决方案1】:

每个Object 可以 ToString,那你为什么不使用呢?

Dim text = If(valueToInsert Is Nothing, "", valueToInsert.ToString())
_pptSld.Shapes(tbName).TextFrame.TextRange.Text = text 

您不能在泛型上使用CStr。参数的类型必须可转换为String,这在您的情况下无法保证。这就是你得到编译器错误的原因。我不会再使用那些旧的 VB 函数了。总有 .NET 替代品。

【讨论】:

  • 啊,这行得通。你能告诉我为什么 .ToString 有效但 CStr() 无效吗?我只是想明白。感谢您的回答!
  • @ruedi:我已经编辑了我的答案。 CStr 期望参数可转换为字符串,因此并非所有对象都被允许。只有一些喜欢:布尔值、日期、数字、空值或字符串。
猜你喜欢
  • 2021-09-23
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2014-03-15
  • 2012-12-14
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多