C#带字符串数组的TrimStart参数:TrimStart(params string[]trimstrimstrings)

C#带字符串数组的TrimStart参数:TrimStart(params string[]trimstrimstrings),c#,string,extension-methods,C#,String,Extension Methods,我正在为TrimStart(params String[]trimstrimstrings) 和接受字符串数组参数的TrimEnd(params string[]trimstrimstrings) 方法应该像默认的TrimStart(params char[]trimChars)和TrimEnd(params char[]trimChars)方法一样工作。即,目的是从trimStrings数组中修剪每个(完全匹配)字符串的所有匹配项 添加一个不区分大小写的修剪选项也很好 实施这种方法的最佳方式是

我正在为
TrimStart(params String[]trimstrimstrings)
和接受字符串数组参数的
TrimEnd(params string[]trimstrimstrings)

方法应该像默认的
TrimStart(params char[]trimChars)
TrimEnd(params char[]trimChars)
方法一样工作。即,目的是从trimStrings数组中修剪每个(完全匹配)字符串的所有匹配项

添加一个不区分大小写的修剪选项也很好

实施这种方法的最佳方式是什么? 请参阅下面的“我的尝试”。

我的解决方案:

public static string TrimStart(this string target, StringComparison comparisonType, params string[] trimStrings)
{
    string result = target;
    if (trimStrings == null)
        return result;
    var _trimStrings = trimStrings.OrderByDescending(t => t.Length).ToList();
    bool trimmed = false;
    do
    {
        trimmed = false;
        foreach (var trimString in _trimStrings)
        {
            while (result.StartsWith(trimString, comparisonType))
            {
                result = result.Substring(trimString.Length);
                trimmed = true;
            }
        }
    } while (trimmed);
    return result;
}

public static string TrimEnd(this string target, StringComparison comparisonType, params string[] trimStrings)
{
    string result = target;
    if (trimStrings == null)
        return result;
    var _trimStrings = trimStrings.OrderByDescending(t => t.Length).ToList();
    bool trimmed = false;
    do
    {
        trimmed = false;
        foreach (var trimString in _trimStrings)
        {
            while (result.EndsWith(trimString, comparisonType))
            {
                result = result.Substring(0, result.Length - trimString.Length);
                trimmed = true;
            }
        }
    } while (trimmed);
    return result;
}

即使你的问题不是一个真正的问题,而是一个规范,我也尝试了一下

这是我的
TrimStart
,您可以自己编写
trimsend


不是代码请求站点。你必须首先尝试实现它们。我想你正在寻找rentacoder.com。我在最后改变了问题。但是,如果你不尝试,这仍然不是一个好问题。你明白你真正想要的是什么吗?它到底应该如何工作?“trimmingDATA”的结果应该是什么?TrimStart(“trim”,“trimming”)?现在您已经展示了您的方法,它有什么问题?你应该提到这个问题。它是否像预期的那样工作,速度慢,不可读,你有什么问题吗?否则,这不是一个真正的问题,但可能是一个候选人。
public static string TrimStart(this string str, StringComparison comparison = StringComparison.CurrentCulture, params string[] trimStrings)
{
    if (str == null) return null;

    // Check the longest strings first and check only relevant strings
    List<string> orderedTrimStrings = trimStrings
        .Where(ts => !String.IsNullOrEmpty(ts) && ts.Length <= str.Length)
        .OrderByDescending(ts => ts.Length)
        .ToList();  

    int minLength = orderedTrimStrings.Last().Length;
    for (int i = 0; i + minLength <= str.Length;)
    {
        string longestTrim = orderedTrimStrings
            .Where(ts => i + ts.Length <= str.Length)
            .FirstOrDefault(ts => str.Substring(i, ts.Length).Equals(ts, comparison));
        if (longestTrim == null)
            return str.Substring(i);
        else
            i += longestTrim.Length;
    }
    return "";
}
string hw = "Hello World";
hw = hw.TrimStart(StringComparison.CurrentCultureIgnoreCase, "hello", " ");
// "World"