.Net相当于旧的vb left(字符串,长度)函数?

Jos*_*osh 65 .net c# vb.net

作为一个非.net程序员,我正在寻找旧的vb函数的.net等价物left(string, length).它很懒,因为它适用于任何长度的字符串.正如预期的那样,left("foobar", 3) = "foo"最有帮助的是,left("f", 3) = "f".

在.net中string.Substring(index, length)抛出异常超出范围的所有内容.在Java中,我总是使用Apache-Commons lang.StringUtils.在Google中,我不太了解字符串函数.

编辑:

@Noldorin - 哇,谢谢你的vb.net扩展!我第一次遇到,虽然我花了几秒钟在c#中做同样的事情:

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

请注意静态类和方法以及this关键字.是的,它们就像调用一样简单"foobar".Left(3).另请参见msdn上的c#extensions.

Nol*_*rin 52

这是一个可以完成这项工作的扩展方法.

<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
Run Code Online (Sandbox Code Playgroud)

这意味着您可以像使用旧的VB Left函数(即Left("foobar", 3))或使用较新的VB.NET语法一样使用它,即

Dim foo = "f".Left(3) ' foo = "f"
Dim bar = "bar123".Left(3) ' bar = "bar"
Run Code Online (Sandbox Code Playgroud)

  • @Andrew Robinson:不是,我想.仅仅因为他没有提到它,并不意味着它不是一个有效的(除了)答案.事实上,因为他没有提到它,我怀疑它可能对他更感兴趣.添加可能有用的额外信息永远不会伤害.:) (4认同)

Ode*_*ded 33

另一个行选项将类似于以下内容:

myString.Substring(0, Math.Min(length, myString.Length))
Run Code Online (Sandbox Code Playgroud)

myString是您尝试使用的字符串.


Gar*_*ler 31

添加到Microsoft.VisualBasic程序库的引用,你可以使用Strings.Left正是同样的方法.

  • 这就像在你找不到汤匙的时候用叉子搅拌你的汤. (4认同)
  • @ JennyO'Reilly虽然你的比喻很丰富,却被误用了.OP要求VB功能,这正是他要求的. (4认同)

CCo*_*ron 13

不要忘记空案例

  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));
    }
Run Code Online (Sandbox Code Playgroud)


Jea*_*rin 5

你可以做自己的

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

编辑:我的是C#,你必须为vb更改它


Jef*_*ord 5

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
}
Run Code Online (Sandbox Code Playgroud)

不应该出错,将nulls作为空字符串返回,返回trimmed或base值.使用它像"testx".Left(4)或str.Right(12);