我有以下代码:
StringReader contentReader = new StringReader(this.dataContent.ToString());
在我解析DataContent之后,我需要重置contentReader的poistion以开始字符串。我该怎么做?我在StringReader
中没有看到set poistion选项答案 0 :(得分:8)
将其设置为StringReader的新实例。我不相信你可以改变现有的位置。
contentReader = new StringReader(this.dataContent.ToString());
答案 1 :(得分:2)
另一种选择是将字符串加载到MemoryStream
然后使用StreamReader
迭代它。 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);
}
}
答案 2 :(得分:1)
StringReader使用名为int
的私有_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());
}
}
答案 3 :(得分:-1)
另见类似问题: How do you reset a C# .NET TextReader cursor back to the start point?
但正如马修所说,解决方案可能只是创建一个新的。