我有以下代码:
StringReader contentReader = new StringReader(this.dataContent.ToString());
解析 DataContent 后,我需要将 contentReader 的位置重置为字符串的开头。我该怎么做?我在 StringReader 中没有看到设置位置选项
我有以下代码:
StringReader contentReader = new StringReader(this.dataContent.ToString());
解析 DataContent 后,我需要将 contentReader 的位置重置为字符串的开头。我该怎么做?我在 StringReader 中没有看到设置位置选项
将其设置为 StringReader 的新实例。我不相信您可以更改现有位置的位置。
contentReader = new StringReader(this.dataContent.ToString());
另一种选择是将字符串加载到 aMemoryStream
然后使用 aStreamReader
对其进行迭代。 MemoryStream
绝对支持内存流上的位置重置。
String data = "Hello! My name it Inigo Montoya.";
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
using (StreamReader reader = new StreamReader(stream))
{
// Do your parsing here using the standard StreamReader methods.
// They should be fairly comparable to StringReader.
// When all done, reset stream position to the beginning.
stream.Seek(0, SeekOrigin.Begin);
}
}
int
StringReader 使用名为 的私有字段跟踪其在字符串中的位置_pos
,如果要重置它,可以使用如下简单的扩展方法:
public static void Reset(this StringReader reader)
{
reader.GetType()
.GetField("_pos", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(reader, 0);
}
和一个测试方法:
[Test]
public void Reset()
{
const string random = "this is a test string";
using(var reader = new StringReader(random))
{
Assert.AreEqual(random, reader.ReadToEnd());
Assert.IsEmpty(reader.ReadToEnd());
reader.Reset();
Assert.AreEqual(random, reader.ReadToEnd());
Assert.IsEmpty(reader.ReadToEnd());
}
}
另请参阅类似问题: How do you reset a C# .NET TextReader cursor back to the start point?
但正如马修所说,解决方案可能是简单地创建一个新的。