vb里的lbound和ubound的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb里的lbound和ubound的用法相关的知识,希望对你有一定的参考价值。

参考技术A 分类: 电脑/网络 >> 程序设计 >> 其他编程语言
解析:

LBound 函数: 返回一个 Long 型数据,其值为指定数组维可用的最小下标。

>>语法

LBound(arrayname[, dimension])

>>LBound 函数的语法包含下面部分:

arrayname 必需的。数组变量的名称,遵循标准的变量命名约定。

dimension 可选的;Variant (Long)。指定返回哪一维的下界。1 表示第一维,2 表示第二维,如此类推。如果省略 dimension,就认为是 1。

>>说明

LBound 函数与 UBound 函数一起使用,用来确定一个数组的大小。UBound 用来确定数组某一维的上界。

>>对具有下述维数的数组而言,LBound 的返回值见下表:

Dim A(1 To 100, 0 To 3, -3 To 4)

语句 返回值

LBound(A, 1) 1

LBound(A, 2) 0

LBound(A, 3) -3

所有维的缺省下界都是 0 或 1,这取决于 Option Base 语句的设置。使用 Array 函数创建的数组的下界为 0;它不受 Option Base 的影响。

>>对于那些在 Dim 中用 To 子句来设定维数的数组而言,Private、Public、ReDim 或 Static 语句可以用任何整数作为下界。

==============================

UBound 函数: 返回一个 Long 型数据,其值为指定的数组维可用的最大下标。

>>语法

UBound(arrayname[, dimension])

>>UBound 函数的语法包含下面部分:

arrayname 必需的。数组变量的名称,遵循标准变量命名约定。

dimension 可选的;Variant (Long)。指定返回哪一维的上界。1 表示第一维,2 表示第二维,如此等等。如果省略 dimension,就认为是 1。

>>说明

UBound 函数与 LBound 函数一起使用,用来确定一个数组的大小。LBound 用来确定数组某一维的上界。

对具有下述维数的数组而言,UBound 的返回值见下表:

Dim A(1 To 100, 0 To 3, -3 To 4)

语句 : 返回值

UBound(A, 1) : 100

UBound(A, 2) : 3

UBound(A, 3) : 4

VB 到 C# 函数

【中文标题】VB 到 C# 函数【英文标题】:VB to C# Functions 【发布时间】:2010-12-15 22:12:57 【问题描述】:

从 VB.Net 到 C#,以下哪些运算符相当于?

UBound() LBound() IsNothing() Chr() Len() UCase() LCase() 左() 右() RTrim() LTrim() 修剪() 中() 替换() 拆分() 加入() MsgBox() IIF()

【问题讨论】:

无论如何,这些都是 VB6 的遗留物——在 VB.NET 中,您应该使用 String 或 Array 对象的方法,例如 String.TrimLeft、String.ToUpper 和 Array.GetUpperBound。当然还有 MessageBox.Show 仅供参考,它们并不是真正的“VB.NET”运算符,VB.NET 中包含一个兼容性库(如果需要,您可以选择在 C# 中使用,只需添加参考以及从 VB.OLD 继承这些功能的 using) - 所以如果一个人想要真正迂腐...... 只是一个小问题:这些都是函数。 没有一个是运算符。 @erikkallen 不是老兄,我正在将代码从 VB 转换为 C#。第一个功能是粗体的,我也发现了这个vbconversions.net/vbtocsdetail.htm,我想让它成为每个需要的人的CW。 【参考方案1】:
VB             C#

UBound()     = yourArray.GetUpperBound(0) or yourArray.Length for one-dimesional arrays
LBound()     = yourArray.GetLowerBound(0)
IsNothing()  = Object.ReferenceEquals(obj,null)
Chr()        = Convert.ToChar()
Len()        = "string".Length
UCase()      = "string".ToUpper()
LCase()      = "string".ToLower()
Left()       = "string".Substring(0, length)
Right()      = "string".Substring("string".Length - desiredLength)
RTrim()      = "string".TrimEnd()
LTrim()      = "string".TrimStart()
Trim()       = "string".Trim()
Mid()        = "string".Substring(start, length)
Replace()    = "string".Replace()
Split()      = "string".Split()
Join()       = String.Join()
MsgBox()     = MessageBox.Show()
IIF()        = (boolean_condition ? "true" : "false")

备注

yourArray.GetUpperBound(0) vs yourArray.Length:如果数组长度为零,GetUpperBound 将返回 -1,而 Length 将返回 0。VB.NET 中的UBound() 将返回 -1 用于零长度数组。 VB 字符串函数使用从一开始的索引,而 .NET 方法使用从零开始的索引。 IE。 Mid("asdf",2,2) 对应于"asdf".SubString(1,2)? 不完全等同于IIf,因为IIf 总是评估两个 参数,而? 只评估它需要的那个。如果评估有副作用,这可能很重要~颤抖! 许多经典的 VB 字符串函数,包括 Len()UCase()LCase()Right()RTrim()Trim(),将在 c# 中处理 NothingNull)的参数) 等价于零长度字符串。在Nothing 上运行字符串方法当然会抛出异常。 您还可以将Nothing 传递给经典的VB Mid()Replace() 函数。这些将返回Nothing,而不是引发异常。

【讨论】:

请注意,并仔细检查您没有踩过别人的编辑 我怀疑你颠倒了UBound和LBound,但我不懂VB。 奇怪的是,当你踩到别人的编辑时你甚至没有收到警告...... @Meta-Knight - meta-Knight 已经报道过,但显然到目前为止还没有做任何事情 ? 不完全等同于IIf,因为IIf 总是计算两个参数,而? 只计算它需要的那个。如果评估有副作用,这可能很重要。我认为 C# 中没有与 IIf 直接等价的东西 - 我认为您需要编写一个自定义函数。【参考方案2】:
UBound()  "array".Length
LBound()
IsNothing(): "object" == null
Chr()     (char)"N"
Len()     "string".Length
UCase()   "string".ToUpper()
LCase()   "string".ToLower()
Left()    "string".Substring(from, to)
Right()   "string".Substring(from, to)
RTrim()   "string".TrimEnd()
LTrim()   "string".TrimStart()
Trim()    "string".Trim()
Mid()     "string".Substring(from, to)
Replace() "string".Replace()
Split()   "string".Split()
Join()    String.Join()
MsgBox()  MessageBox.Show()
IIF()     validate ? iftrue : iffalse;

【讨论】:

【参考方案3】:

所有这些函数都是Microsoft.VisualBasic.Information类的成员方法,在Microsoft.VisualBasic程序集中,所以你可以直接使用它们。但是,它们中的大多数在核心 .NET 框架类中具有 C# 等效项或非语言特定等效项:

UBound():Array.GetUpperBound LBound() : Array.GetLowerBound IsNothing():== null Chr() : (char)intValue(演员表) Len() : String.Length UCase() : String.ToUpper LCase():String.ToLower Left()、Right() 和 Mid():String.Substring(使用不同的参数) RTrim():String.TrimEnd LTrim():String.TrimStart 修剪():String.Trim 替换():String.Replace 拆分():String.Split 加入():String.Join 消息框():MessageBox.Show IIF() : condition ? valueIfTrue : valueIfFalse(条件运算符)

链接

Array members String members MessageBox.Show conditional operator

【讨论】:

【参考方案4】:

其中大部分是返回修改后字符串的字符串对象上的实例方法。

MsgBox vs. MessageBox.Show(..)
IIF vs. (expression?returnValueIfTrue:returnValueElse)

【讨论】:

【参考方案5】:

IIf(test, trueval, falseval) >> (test ? trueval : falseval);

IsNothing(obj) >> (obj == null);

UCase(str) >> str.ToUpper();

LCase(str) >> str.ToLower();

【讨论】:

【参考方案6】:

首先,其中大多数不是运算符。它们是函数,出于兼容性原因,这些函数仅包含在 VB.Net 中。这意味着您也不应该在 VB.net 中使用它们,而应使用新 API 提供的等效项。

UBound()arrayVar.Length LBound() — 已过时,在普通 .Net 数组中,下限始终为 0 IsNothing() — 已过时。在 VB.Net 中使用 Is Nothing,在 C# 中使用 == null Chr()Convert.ToChar()(char)someVar Len()stringVar.Length 在 VB 中也使用它 UCase()stringVar.ToUpper() 在 VB 中也可以使用它 LCase()stringVar.ToLower() 在 VB 中也使用它 Left()stringVar.Substring(0, n) 在 VB 中也可以使用它 Right()stringVar.Substring(stringVar.Length - n) 在 VB 中也可以使用它 RTrim()stringVar.TrimEnd() 在 VB 中也可以使用它 LTrim()stringVar.TrimStart() 在 VB 中也可以使用它 Trim()stringVar.Trim() 在 VB 中也可以使用它 Mid()stringVar.Substring(n, m) 在 VB 中也使用它 Replace()stringVar.Replace() 在 VB 中也可以使用它 Split()stringVar.Split() 在 VB 中也可以使用它 Join()String.Join() 在 VB 中也可以使用它 MsgBox()MessageBox.Show() IIF()(condition) ? truepart : falsepart - 请注意存在一些差异,因为“?”是运算符而不是函数

【讨论】:

@Thomas:这取决于您如何在旧 vb 中设置 Option Base。 COM 调用返回的数组的下限可能不是 0。【参考方案7】:

您可以在this wikipedia page 上找到其中许多函数的转换。

【讨论】:

【参考方案8】:

我相信其中一些像 Mid() 仍然在 Microsoft.VisualBasic 命名空间中的 .NET Framework 中可用,您仍然可以从 C# 代码中引用它。

【讨论】:

【参考方案9】:

另一个...

VB - IsDBNull(值)

C# - yourdatarow.IsNull("columnName")

【讨论】:

【参考方案10】:

除了上面的答案。 替换 Len() -> x.Length 时要小心。 VB Len() 允许你传递 null,但在 c# 中你会得到一个异常。 有时使用 String.IsNullrEmpty() 会更好(如果情况允许)

【讨论】:

【参考方案11】:

如果您查看 MSDN,您会发现大部分时间都有两种语言的示例代码。

【讨论】:

【参考方案12】: UBound() -> 如果 x 是 string[] 的数组,例如:x.GetUpperBound(); LBound() -> 如果 x 是 string[] 的数组,例如:x.GetLowerBound(); IsNothing() -> if (x == null) Chr() -> char x = (char)65; Len() -> x.Length(); UCase() -> 假设 x 是一个字符串:x.ToUpper(); LCase() -> 假设 x 是一个字符串:x.ToLower(); Left() -> 假设 x 是一个字符串:x.Substring(0, 10); // 前 10 个字符 Right() -> 假设 x 是一个字符串:x.Substring(x.Length - 10); // 最后 10 个字符 RTrim() -> x.TrimEnd(); LTrim() -> x.TrimStart(); Trim() -> x.Trim(); Mid() -> 假设 x 是一个字符串:x.Substring() Replace() -> 假设 x 是一个字符串:x.Replace(); Split() -> 假设 x 是一个字符串:x.Split(); Join() -> String.Join(); MsgBox() -> MessageBox.Show(); IIF() -> 三元运算符(x == true ? true-value : false-value);

【讨论】:

【参考方案13】:

另外一个补充可能是 IndexOf() 函数在字符串中查找字符串

下面的例子...

string MainString = "String Manipulation"; 
string SearchString = "pul"; 
int FirstChr = MainString.IndexOf(SearchString); 
//SHOWS START POSITION OF STRING 
MessageBox.Show("Found at : " + FirstChr );

【讨论】:

【参考方案14】:

其他人的列表中缺少空间功能:

Space(16) -> new String(" ", 16)

【讨论】:

以上是关于vb里的lbound和ubound的用法的主要内容,如果未能解决你的问题,请参考以下文章

VB 到 C# 函数

随机数的生成

VB字符串分割为数组,并获取下标值

VB字符串分割为数组并遍历下标值

Visual Studio里的GridView控件用法

VB中,关于Format的用法问题 求解