.NET эквивалент старой функции vb left (string, length)?

Как программист non.net, я ищу эквивалент .net старой функции vb left(string, length). Это было лениво, поскольку он работал для любой длины строки. Как и ожидалось, left("foobar", 3) = "foo" в то время как, наиболее полезно, left("f", 3) = "f".

В .net string.Substring(index, length) выдает исключения для всего вне диапазона. В Java у меня всегда был Apache-Commons lang.StringUtils. В Google я не очень хорошо разбираюсь в строковых функциях.

Edit:

@Noldorin - Вау, спасибо за ваши расширения vb.net! Моя первая встреча, хотя мне потребовалось несколько секунд, чтобы сделать то же самое в С#:

public static class Utils
{
    public static string Left(this string str, int length)
    {
        return str.Substring(0, Math.Min(length, str.Length));
    }
}

Обратите внимание на статический класс и метод, а также на ключевое слово this. Да, их так же просто вызвать как "foobar".Left(3). См. Также расширения С# в msdn.

Ответ 1

Здесь используется метод расширения, который будет выполнять задание.

<System.Runtime.CompilerServices.Extension()> _
Public Function Left(ByVal str As String, ByVal length As Integer) As String
    Return str.Substring(0, Math.Min(str.Length, length))
End Function

Это означает, что вы можете использовать его так же, как и старую функцию VB Left (т.е. Left("foobar", 3)) или использовать новый синтаксис VB.NET, т.е.

Dim foo = "f".Left(3) ' foo = "f"
Dim bar = "bar123".Left(3) ' bar = "bar"

Ответ 2

Добавьте ссылку на библиотеку Microsoft.VisualBasic, и вы можете использовать Strings.Left, который является точно таким же способом.

Ответ 3

Еще один вариант с одной строкой будет выглядеть примерно так:

myString.Substring(0, Math.Min(length, myString.Length))

Где myString - это строка, с которой вы пытаетесь работать.

Ответ 4

не забывайте нулевой случай

  public static string Left(this string str, int count)
    {
        if (string.IsNullOrEmpty(str) || count < 1) 
            return string.Empty;
        else
            return str.Substring(0,Math.Min(count, str.Length));
    }

Ответ 5

вы можете сделать свой собственный

private string left(string inString, int inInt)
{
    if (inInt > inString.Length)
        inInt = inString.Length;
    return inString.Substring(0, inInt);
}

edit: mine находится в С#, вам придется изменить его для vb

Ответ 6

using System;

public static class DataTypeExtensions
{
    #region Methods

    public static string Left(this string str, int length)
    {
        str = (str ?? string.Empty);
        return str.Substring(0, Math.Min(length, str.Length));
    }

    public static string Right(this string str, int length)
    {
        str = (str ?? string.Empty);
        return (str.Length >= length)
            ? str.Substring(str.Length - length, length)
            : str;
    }

    #endregion
}

Не следует использовать ошибку, возвращает nulls как пустую строку, возвращает обрезанные или базовые значения. Используйте его как "testx".Left(4) или str.Right(12);

Ответ 7

Вы можете либо обернуть вызов подстроке в новую функцию, которая проверяет ее длину, как предложено в других ответах (правильно), либо использовать пространство имен Microsoft.VisualBasic и использовать левую ссылку (обычно считается неправильной!).

Ответ 8

Другой способ - расширить строковый объект, добавив метод Left().

Вот исходная статья по этой технике:

http://msdn.microsoft.com/en-us/library/bb384936.aspx

Вот моя реализация (в VB):

Модуль StringExtensions

<Extension()>
Public Function Left(ByVal aString As String, Length As Integer)
    Return aString.Substring(0, Math.Min(aString.Length, Length))
End Function

Конечный модуль

Затем поместите это вверху любого файла, в котором вы хотите использовать расширение:

Imports MyProjectName.StringExtensions

Используйте его следующим образом:

MyVar = MyString.Left(30)

Ответ 9

Мне нравится делать что-то вроде этого:

string s = "hello how are you";
s = s.PadRight(30).Substring(0,30).Trim(); //"hello how are you"
s = s.PadRight(3).Substring(0,3).Trim(); //"hel"

Хотя, если вам нужны конечные или начальные пробелы, вам не повезло.

Мне очень нравится использование Math.Min, это лучшее решение.

Ответ 10

Только в очень особенном случае:

Если вы делаете это так, то вы проверите данные с некоторой частичной строкой, например: if(Strings.Left(str, 1)=="*") ...;

Затем вы также можете использовать методы экземпляра С#, такие как StartsWith и EndsWith для выполнения этих задач. if(str.StartsWith("*"))...;