VB 到 C# 函数

Posted

技术标签:

【中文标题】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 到 C# 函数的主要内容,如果未能解决你的问题,请参考以下文章

c#代码来查找确切的日期差异,如vb [重复]

C# 调用函数后窗体假死失去响应

C# 中如何调用Copy和粘贴函数

C#编程中,出现 不包含采用“2”参数的构造函数的错误 怎么改?

VB 函数调用中参数的正确语法

如何从 C# 中的方法返回等效的 VB6 Variant 类型