是否有空格(n)"方法

本文关键字:quot 方法 空格 是否 | 更新日期: 2023-09-27 17:52:56

我正在把一个古老的VB6程序转换成c#。Net 4.0),在一个例程中,它做了大量的字符串操作和生成。它使用的大多数原生VB6代码在c#字符串类中都有类似的东西,例如Trim()。但是我似乎找不到Space(n)的替代品,它显然会生成一个字符串n spaces。

查看MSDN文档,似乎有一个Space()方法用于VB。Net,但我找不到在VB之外提到它。净上下文。为什么会这样?我以为所有。net语言都共享同一个CLR。

c#或。net是否有一个通用的Space()方法,我可以在c#中使用,我只是忽略了某个地方?

注意:我知道,对于某些编程语言,编写一行程序来生成n-space是一个流行的测验问题,也是程序员的酒吧游戏,但我不是在寻求这方面的建议。如果在c#/中没有原生的方法来做到这一点。Net很容易编写一个简单的方法;我只是不想重新发明轮子。

是否有空格(n)"方法

System.String上使用此构造函数:

new String(' ', 10);

http://msdn.microsoft.com/en-us/library/xsa4321w (v = vs.110) . aspx

你也可以使用一个简洁的扩展方法(尽管使用String构造函数并保存额外的方法调用可能更好):

public static class CharExtensions
{
    public static string Repeat(this char c, int count)
    {
        return new String(c, count);
    }
}
...
string spaces = ' '.Repeat(10);

string类有一个构造函数,它为您提供一个字符串,该字符串由指定字符的n个副本组成:

// 32 spaces
string str = new string(' ', 32);

我总是使用:

var myString = "".PadLeft(n);

。.NET在Microsoft.VisualBasic命名空间中有一组兼容性函数,用于将旧的VB代码转换为。NET,其中之一是重新创建Space函数。

var myString = Microsoft.VisualBasic.Strings.Space(10); //Or just Strings.Space(10); if you do "using Microsoft.VisualBasic;" at the top of your file.

然而,我建议使用new String(' ', 10)方法,其他答案提到。

通常,当有人在VB中使用空格函数时,这是因为他们正在连接字符串,并且需要在右侧加一个空格。

Dim strConcatVB6 As String
strConcatVB6 = "Someone" & Space(1) & "Help" & Space(1) & "Out!"
Dim strConcatNet As String = String.Concat("Someone", Space(1), "Help", Space(1), "Out!")
Debug.WriteLine(strConcatVB6)
Debug.WriteLine(strConcatNet)

移植代码时欺骗Space函数的一个简单方法显然是在c#中创建一个模仿它的函数。

Func<int, string> Space = (n) => ("".PadRight(n));
string strConcat = string.Concat("Somebody", Space(1), "Help", Space(1), "Out!");
MessageBox.Show(strConcat);

我希望VB团队摒弃旧的丑陋(曾经是漂亮的)字符串函数,这些函数来自于老版本的语言规范,在。net中被简化,并在像Space这样的酷版本中工作。我向最初的问题海报道歉,因为你正在寻找c#中的VBs空间函数的本机函数。

我喜欢GregRos的回答,但对其进行了一些修改,使其更具说明性,而不是那么依赖于引号,因为引号可能会意外插入文本。

var myString = string.Empty.PadLeft(n);

字符串。Microsoft.VisualBasic.dll中存在空间。这在VB中似乎是"内置的"。. NET而不是c#,原因有两个:

  • c#需要using语句,而VB。. NET编译器允许配置自动导入(Microsoft.VisualBasic包含在默认配置中)。

  • VB将"module"成员视为全局函数(注意string类上的[StandardModuleAttribute])。

但是,是的,您可以添加对Microsoft.VisualBasic.dll的引用并写入:

using Microsoft.VisualBasic;
...
Strings.Space(n)

当然,这些方法存在的原因主要是为了避免对VB6开发人员进行再培训。如果要花时间转换应用程序,最好使用. net特性(如格式字符串)重新实现它。

//Author: Puffgroovy
//Email: ZSSZCMRIVYDT@spammotel.com
//
// Usage - CustomFunctions cf = new CustomFunctions();
// String strMessage = "Error Found - " + cf._DoubleQuote() + e.Message + cf._Space(23) + cf._DoubleQuote();
//

using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;

namespace DHHS_CustomFunctions
{
    class CustomFunctions
    {
        /// <summary>
        /// Same as the VB.NET Space Function
        /// </summary>
        /// <param name="intNumberOfSpaces"></param>
        /// <returns>String</returns>
        public string _Space(int intNumberOfSpaces)
        {
            return new String(' ', intNumberOfSpaces);
        }
        /// <summary>
        /// New Line Character
        /// </summary>
        /// <returns></returns>
        public string _NewLine()
        {
            return ("'n");
        }
        /// <summary>
        /// Double Quote Character
        /// </summary>
        /// <returns></returns>
        public string _DoubleQuote()
        {
            return ("'"");
        }
        /// <summary>
        /// SingleQuote Character
        /// </summary>
        /// <returns></returns>
        public string _SingleQuote()
        {
            return ("''");
        }
        /// <summary>
        /// Calls Environment.Exit(0);
        /// </summary>
        public void _Quit()
        {
            Environment.Exit(0);
        }
        /// <summary>
        /// Returns the backslash character
        /// </summary>
        /// <returns></returns>
        public string _Backslash()
        {
            return ("''");
        }
        /// <summary>
        /// Returns a null character
        /// </summary>
        /// <returns></returns>
        public string _Null()
        {
            return ("'0");
        }
        /// <summary>
        /// Bell. Same as Alert
        /// </summary>
        /// <returns></returns>
        public string _Bell()
        {
            return ("'a");
        }
        /// <summary>
        /// Alert. Same as Bell
        /// </summary>
        /// <returns></returns>
        public string _Alert()
        {
            return ("'a");
        }
        /// <summary>
        /// Backspace Character
        /// </summary>
        /// <returns></returns>
        public string _Backspace()
        {
            return ("'b");
        }
        /// <summary>
        /// Form Feed Character
        /// </summary>
        /// <returns></returns>
        public string _FormFeed()
        {
            return ("'f");
        }
        /// <summary>
        /// Carriage Return Character
        /// </summary>
        /// <returns></returns>
        public string _CarriageReturn()
        {
            return ("'r");`enter code here`
        }
        /// <summary>`enter code here`
        /// Vertical Tab Character
        /// </summary>
        /// <returns></returns>
        public string _VerticleTab()
        {
            return ("'v");
        }
    }
}
相关文章: