Есть ли метод "Space (n)" в С#/. Net?
Я конвертирую старую программу VB6 в С# (.Net 4.0), и в одной рутине она выполняет много манипуляций и генерации строк. Большая часть исходного кода VB6, который он использует, имеет аналоги в строковом классе С#, например Trim(). Но я не могу найти замену Space (n), где он, по-видимому, генерирует строки n.
Просматривая документацию MSDN, похоже, для VB.Net существует метод Space(), но я не мог найти его упомянутым вне контекста VB.Net. Почему это? Я думал, что все языки .Net имеют одну и ту же CLR.
Есть ли у С# или .Net общий метод Space(), который я могу использовать в С#, который я просто где-то просматриваю?
N.B. Я знаю, что писать однострочные для генерации n-пространств - это популярная игра-вопрос для программистов и программистов для некоторых языков программирования, но я не ищу совета по этому поводу. Если в С#/нет обычного способа сделать это, Net достаточно просто написать простой метод; Я просто не хочу изобретать велосипед.
Ответы
Ответ 1
Используйте этот конструктор на 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);
Ответ 2
В классе string
есть конструктор, который дает вам строку, состоящую из n копий указанного символа:
// 32 spaces
string str = new string(' ', 32);
Ответ 3
.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)
, о котором говорят другие ответы.
Ответ 4
Я всегда использую:
var myString = "".PadLeft(n);
Ответ 5
Обычно, когда кто-то использует пространственную функцию в 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 при переносе кода, - это, очевидно, создать функцию, которая имитирует ее на С#.
Func<int, string> Space = (n) => ("".PadRight(n));
string strConcat = string.Concat("Somebody", Space(1), "Help", Space(1), "Out!");
MessageBox.Show(strConcat);
Я желаю, чтобы команда VB осудила старые уродливые (привычные) строковые функции из более старых версий спецификации языка, которые были оптимизированы в .NET и работают в крутых, таких как Space. Приносим извинения за исходный вопрос, поскольку вы искали встроенную функцию в С# для функции VBs Space.
Ответ 6
Strings.Space существует в Microsoft.VisualBasic.dll
. Это похоже на "встроенный" в VB.NET, а не на С# из-за двух причин:
-
В то время как для С# требуются операторы using
, компилятор VB.NET позволяет настроить автоматический импорт (и Microsoft.VisualBasic
включен в конфигурацию по умолчанию).
-
VB рассматривает члены модуля как глобальные функции (обратите внимание на [StandardModuleAttribute]
на класс Strings).
Но да, вы могли бы добавить ссылку на Microsoft.VisualBasic.dll
и написать:
using Microsoft.VisualBasic;
...
Strings.Space(n)
Конечно, причина, по которой эти методы существуют, заключалась главным образом в том, чтобы избежать переподготовки разработчиков VB6. Если вы потратите время на преобразование приложения, вам, вероятно, будет лучше переопределить его с помощью функций .NET, таких как строки формата.
Ответ 7
//Author: Puffgroovy
//Email: [email protected]
//
// 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");
}
}
}