gpt4 book ai didi

c# - 修改 string.Substring

转载 作者:行者123 更新时间:2023-11-30 14:11:19 25 4
gpt4 key购买 nike

10 次中有 9 次,当我想在字符串上使用 Substring() 方法时,这是因为我想从字符串的末尾(而不是开头)去除一些字符。虽然默认的 Substring 确实支持此功能,但它通过采用第二个参数来实现,该参数是所需字符串的长度,而不是端点。这意味着如果我一直想从一系列不同长度的字符串中删除 N 个字符,我必须执行额外的步骤,这可能会产生更多的代码。举个例子:

//Shaving the first N chars
string trimmed = foo.bar.widget.GetType().Name.Substring(N);

对比

//Shaving the last N chars
string trimmed = foo.bar.widget.GetType().Name.Substring(0, foo.bar.widget.GetType().Name.Length - N);

或者为了保存额外的函数调用,使用第二行:

string name = foo.bar.widget.GetType().Name;
string trimmed = name.Substring(0, name.Length - N);

无论哪种方式,基本上都是将字符串末尾而非开头的字符删除所需的代码量加倍。我的修改很简单。如果你传递一个负数 N(否则它是没有意义的),它会从字符串的末尾而不是开头去除 -N 个字符。我已经可以使用扩展方法对此进行编码:

public static string MySubstring(this string str, int val)
{
return (val > 0) ? str.Substring(val) : str.Substring(0, str.Length + val);
}

然后当我想剃掉最后的 N 个字符时,我会这样做:

string trimmed = foo.bar.widget.GetType().Name.MySubstring(-N);

简短而甜美,就像剃掉开头的字符一样。我的问题是——是否可以覆盖默认 Substring() 函数的行为,这样我就可以做到这一点而不必为函数使用我自己的唯一名称?它不会使任何现有代码无效,因为以前没有理由将负数传递给它,这样做只会引发异常并崩溃。这只是那些简单而严肃的功能之一,感觉它应该成为实现的一部分。

最佳答案

根据 C# 文档,you can use extension methods to extend a class or interface, but not to override them. An extension method with the same name and signature as an interface or class method will never be called.所以答案是“否”。

可以说,这是一件好事™,因为否则您的代码对于不熟悉您的扩展程序的人来说将变成一场噩梦。

注意:str.Substring(0, str.Length + val);可以替换为str.Remove(str.Length + val)

关于c# - 修改 string.Substring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com