我正在使用一个StringWriter
我正在传递给一个方法以在foreach
循环中写入值的方法。我相信这会导致产生两个警告:
CA2000:Microsoft.Reliability:在方法“ToCsvService.ToCsv()”中,对象“sw”并未沿所有异常路径进行处理。在对对象“sw”的所有引用超出范围之前调用 System.IDisposable.Dispose。
和
CA2202:Microsoft.Usage:对象“sw”可以在方法“ToCsvService.ToCsv()”中多次处理。为避免生成 System.ObjectDisposedException,您不应在一个对象上多次调用 Dispose。
public string ToCsv()
{
IEnumerable<string> props = GetProperties();
StringWriter sw = new StringWriter(); // first warning here
sw.WriteLine(GetHeadings(props));
WriteValues(props, sw);
sw.Close();
string returnCsv = sw.ToString();
sw.Dispose(); // second warning here
return returnCsv;
}
我已经GetProperties()
从调用的方法列表中省略了,因为它似乎不相关。
private string GetHeadings(IEnumerable<string> props)
{
string headings = String.Join(",",
props.Select(prop =>
_headings.ContainsKey(prop) ? _headings[prop] : prop));
return headings;
}
private void WriteValues(IEnumerable<string> props, StringWriter sw)
{
foreach (object obj in _collection)
{
var x = obj.GetType().GetProperties()
.Where(pi => props.Contains(pi.Name))
.Select(pi =>
_format.ContainsKey(pi.Name)
? String.Format("{0:" + _format[pi.Name] + "}",
pi.GetGetMethod().Invoke(obj, null))
: pi.GetGetMethod().Invoke(obj, null).ToString());
string values = String.Join<string>(",", x);
sw.WriteLine(values);
}
}
为什么会产生这些警告?