本文整理汇总了C#中MutableString.TrackChanges方法的典型用法代码示例。如果您正苦于以下问题:C# MutableString.TrackChanges方法的具体用法?C# MutableString.TrackChanges怎么用?C# MutableString.TrackChanges使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MutableString
的用法示例。
在下文中一共展示了MutableString.TrackChanges方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BlockReplaceAll
public static object BlockReplaceAll(ConversionStorage<MutableString>/*!*/ tosConversion,
RubyScope/*!*/ scope, [NotNull]BlockParam/*!*/ block, MutableString/*!*/ self,
[NotNull]RubyRegex pattern)
{
object blockResult;
MutableString result;
self.TrackChanges();
object r = BlockReplaceAll(tosConversion, scope, self, block, pattern, out blockResult, out result) ? blockResult : (result ?? self.Clone());
RequireNoVersionChange(self);
return r;
}
示例2: BlockReplaceInPlace
private static object BlockReplaceInPlace(ConversionStorage<MutableString>/*!*/ tosConversion,
RubyScope/*!*/ scope, BlockParam/*!*/ block, MutableString/*!*/ self,
RubyRegex/*!*/ pattern, bool replaceAll) {
object blockResult;
self.TrackChanges();
// prepare replacement in a builder:
MutableString builder;
if (replaceAll ?
BlockReplaceAll(tosConversion, scope, self, block, pattern, out blockResult, out builder) :
BlockReplaceFirst(tosConversion, scope, self, block, pattern, out blockResult, out builder)) {
// block jumped:
return blockResult;
}
// unsuccessful match:
if (builder == null) {
return null;
}
RequireNoVersionChange(self);
if (self.IsFrozen) {
throw new RuntimeError("string frozen");
}
// replace content of self with content of the builder:
self.Replace(0, self.Length, builder);
return self.TaintBy(builder);
}
示例3: BlockReplaceAll
public static object BlockReplaceAll(ConversionStorage<MutableString>/*!*/ tosConversion,
RubyScope/*!*/ scope, [NotNull]BlockParam/*!*/ block, MutableString/*!*/ self,
[NotNull]MutableString matchString) {
object blockResult;
MutableString result;
// TODO:
var regex = new RubyRegex(MutableString.CreateMutable(Regex.Escape(matchString.ToString()), matchString.Encoding), RubyRegexOptions.NONE);
self.TrackChanges();
object r = BlockReplaceAll(tosConversion, scope, self, block, regex, out blockResult, out result) ? blockResult : (result ?? self.Clone());
RequireNoVersionChange(self);
return r;
}
示例4: EachLine
public static object EachLine(BlockParam block, MutableString/*!*/ self, [DefaultProtocol]MutableString separator, int start) {
self.TrackChanges();
MutableString paragraphSeparator;
if (separator == null || separator.IsEmpty) {
separator = DefaultLineSeparator;
paragraphSeparator = DefaultParagraphSeparator;
} else {
paragraphSeparator = null;
}
// TODO: this is slow, refactor when we redo MutableString
MutableString str = self;
// In "normal" mode just split the string at the end of each seperator occurrance.
// In "paragraph" mode, split the string at the end of each occurrance of two or more
// successive seperators.
while (start < self.Length) {
int end;
if (paragraphSeparator == null) {
end = str.IndexOf(separator, start);
if (end >= 0) {
end += separator.Length;
} else {
end = str.Length;
}
} else {
end = str.IndexOf(paragraphSeparator, start);
if (end >= 0) {
end += (2 * separator.Length);
while (str.IndexOf(separator, end) == end) {
end += separator.Length;
}
} else {
end = str.Length;
}
}
// Yield the current line
if (block == null) {
throw RubyExceptions.NoBlockGiven();
}
object result;
MutableString line = self.CreateInstance().TaintBy(self).Append(str, start, end - start);
if (block.Yield(line, out result)) {
return result;
}
start = end;
}
// MRI 1.8: this is checked after each line
// MRI 1.9: not checked at all
// Ensure that the underlying string has not been mutated during the iteration
RequireNoVersionChange(self);
return self;
}