- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在上一个( remove empty strings from list )问题中,我询问了有关从字符串列表中删除空字符串的问题
....
// Clear out the items that are empty
for I := mylist.count - 1 downto 0 do
begin
if Trim(mylist[I]) = '' then
mylist.Delete(I);
end;
....
从代码设计和重用方面来看,我现在更喜欢更灵活的解决方案:
MyExtendedStringlist = Class(TStringlist)
procedure RemoveEmptyStrings;
end;
问:在这种情况下我可以使用类助手吗?与上面设计一个新类相比,这看起来怎么样?
最佳答案
类助手在这里是一个好主意。为了使其更广泛地适用,您应该选择将帮助程序与该帮助程序可以应用的最少派生类相关联。在这种情况下,这意味着 TStrings
。
与派生新类相比,巨大的优势在于您的辅助方法可用于 TStrings
的实例。那些不是你创造的。明显的例子包括TStrings
公开备忘录、列表框等内容的属性。
我个人会编写一个帮助器,使用谓词提供更通用的删除功能。例如:
type
TStringsHelper = class helper for TStrings
public
procedure RemoveIf(const Predicate: TPredicate<string>);
procedure RemoveEmptyStrings;
end;
procedure TStringsHelper.RemoveIf(const Predicate: TPredicate<string>);
var
Index: Integer;
begin
for Index := Count-1 downto 0 do
if Predicate(Self[Index]) then
Delete(Index);
end;
procedure TStringsHelper.RemoveEmptyStrings;
begin
RemoveIf(
function(Item: string): Boolean
begin
Result := Item.IsEmpty;
end;
);
end;
更一般地说,TStrings
是类(class)助手的优秀候选人。它缺少很多有用的功能。我的 helper 包括:
AddFmt
一次性格式化和添加的方法。 AddStrings
在一次调用中添加多个项目的方法。Contains
总结 IndexOf(...)<>-1
的方法并向 future 的代码读者提供了一种语义上更有意义的方法。Data[]
属性,类型 NativeInt
,并匹配 AddData
方法,包装 Objects[]
属性(property)。这隐藏了 TObject
之间的强制转换和NativeInt
.我确信可以添加更多有用的功能。
关于delphi辅助类,删除空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22959430/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!