当前位置:  开发笔记 > 编程语言 > 正文

我应该如何使用VB.NET?

如何解决《我应该如何使用VB.NET?》经验,为你挑选了4个好方法。

所有这些都是平等的吗?我应该在什么情况下选择其他人?

var.ToString()

CStr的(VAR)

CType(var,String)

DirectCast(var,String)


编辑:来自NotMyself的建议......

TryCast(var,String)

bdukes.. 151

这些都略有不同,通常具有可接受的用途.

var.ToString()将为您提供对象的字符串表示形式,无论它是什么类型.如果var不是字符串,请使用此选项.

CStr(var)是VB字符串转换运算符.我不是一个VB人,所以我建议避免它,但它不会真的伤害任何东西.我认为它基本上是一样的CType.

CType(var, String) 将使用任何提供的转换运算符将给定类型转换为字符串.

DirectCast(var, String)用于将对象上传到字符串中.如果您知道对象变量实际上是一个字符串,请使用它.这与(string)varC#中的相同.

TryCast(正如@ NotMyself所提到的)就像DirectCast,但Nothing如果变量无法转换为字符串,它将返回,而不是抛出异常.这与var as stringC#中的相同.TryCastMSDN上的页面也有很好的比较.

TryCast适用于所有*但*值类型. (18认同)

从来没有理由使用CType(var,String)而不是CStr(var),它们完全相同. (15认同)

如果var是DBNull.Value,`CStr(var)`会阻塞并引发异常,但备用`Convert.ToString(var)`将返回一个空字符串. (3认同)

@Maslow`TryCast`仅适用于值类型,因为它需要是一个可以将'Nothing`作为值的类型 (2认同)


小智.. 11

Cstr() 内联编译以获得更好的性能.

CType 如果定义了转换运算符,则允许在类型之间进行转换

ToString() 如果无法进行转换,则在基类型和字符串之间会抛出异常.

TryParse()从String到base typeif否则返回false

DirectCast如果类型通过继承相关或共享一个公共接口使用,如果无法进行强制转换会抛出异常,trycast在这个实例中不会返回任何内容



1> bdukes..:

这些都略有不同,通常具有可接受的用途.

var.ToString()将为您提供对象的字符串表示形式,无论它是什么类型.如果var不是字符串,请使用此选项.

CStr(var)是VB字符串转换运算符.我不是一个VB人,所以我建议避免它,但它不会真的伤害任何东西.我认为它基本上是一样的CType.

CType(var, String) 将使用任何提供的转换运算符将给定类型转换为字符串.

DirectCast(var, String)用于将对象上传到字符串中.如果您知道对象变量实际上是一个字符串,请使用它.这与(string)varC#中的相同.

TryCast(正如@ NotMyself所提到的)就像DirectCast,但Nothing如果变量无法转换为字符串,它将返回,而不是抛出异常.这与var as stringC#中的相同.TryCastMSDN上的页面也有很好的比较.


TryCast适用于所有*但*值类型.
从来没有理由使用CType(var,String)而不是CStr(var),它们完全相同.
如果var是DBNull.Value,`CStr(var)`会阻塞并引发异常,但备用`Convert.ToString(var)`将返回一个空字符串.
@Maslow`TryCast`仅适用于值类型,因为它需要是一个可以将'Nothing`作为值的类型

2> 小智..:

Cstr() 内联编译以获得更好的性能.

CType 如果定义了转换运算符,则允许在类型之间进行转换

ToString() 如果无法进行转换,则在基类型和字符串之间会抛出异常.

TryParse()从String到base typeif否则返回false

DirectCast如果类型通过继承相关或共享一个公共接口使用,如果无法进行强制转换会抛出异常,trycast在这个实例中不会返回任何内容



3> NotMyself..:

我更喜欢以下语法:

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

哈,你可以告诉我通常用C#编写代码.8)

我更喜欢TryCast的原因是你不必乱用于抛出异常的开销.你的演员要么成功,要么你的变量被初始化为null,你会相应地处理它.


@Shimmy:完全​​没有使用TryCast的原因是什么?DirectCast在某些情况下避免异常是不是更好?
@Dienekes和NotMyself.TryCast仅适用于REFERENCE类型.这里,我们有一个Integer,它是一个VALUE类型.编译器将拒绝TryCast.此外,目标是一个字符串.除Nothing之外的任何.Net实体都支持`.ToString()`.值类型(如Integer)不能为Nothing.所以在这种情况下,CStr(number)或number.ToString()都是安全的.在一般情况下(不只是值类型),CStr(无论如何)是安全的,因为它可以处理Nothing - 结果将是String变量中的Nothing.TryCast非常有用 - 只是不在这里.

4> OwenP..:

MSDN似乎表明,针对特定类型的Cxxx强制转换可以提高VB .NET的性能,因为它们被转换为内联代码.出于某种原因,它还建议DirectCast而不是CType在某些情况下(文档说明它是在存在继承关系的时候;我相信这意味着在编译时检查强制转换并且可以应用优化,而CType总是使用VB运行时.)

当我编写VB .NET代码时,我使用的内容取决于我正在做什么.如果它是原型代码我将丢弃,我会使用我碰巧输入的任何内容.如果是我认真的代码,我会尝试使用Cxxx演员.如果一个不存在,我会使用DirectCast,如果我有一个合理的信念,即存在继承关系.如果这是我不知道演员表是否应该成功的情况(例如用户输入 - >整数),那么我使用TryCast来做一些比在用户处抛出异常更友好的事情.

我无法理解的一件事是我倾向于使用ToString而不是CStr,但据说Cstr更快.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有