這是我已經實現的東西,需要一個對象並讀取屬性值,然後將其格式化爲csv'd字符串。
Write.WriteObject()
是您如何使用它的一個例子。
public static class StringExtensions
{
public static string ToCSV(this object field, bool first)
{
if(field != null)
{
string retVal = field.ToString();
retVal = retVal.Contains(",") || retVal.Contains("\"") || retVal.Contains("\r\n")
? "\"" + retVal + "\"" : retVal;
retVal = first ? retVal : "," + retVal;
return retVal;
}
else
{
return first ? "" : ",";
}
}
}
public class Format
{
public string CommaSeparatedObject(Type layoutType, object value, bool header)
{
bool first = true;
string retVal = "";
PropertyInfo[] props = layoutType.GetProperties();
if (header)
{
foreach (PropertyInfo prop in props)
{
retVal += prop.Name.ToCSV(first);
first = false;
}
}
else
{
foreach (PropertyInfo prop in props)
{
retVal += prop.GetValue(value).ToCSV(first);
first = false;
}
}
return retVal;
}
}
public class Write
{
public void WriteObject(IEnumerable<myClass> myObj)
{
StreamWriter sw = new StreamWriter(parameters.OutputFile, true, Encoding.ASCII, 16 * 1024);
sw.WriteLine(new Format().CommaSeparatedObject(typeof(myClass), item, true))); //write header
foreach(var item in myObj)
{
sw.WriteLine(new Format().CommaSeparatedObject(typeof(myClass), item, false)));
}
}
}
在一個對象中有200個屬性...?二百?笏?不知怎的,我得到了你沒有正確解釋你的情況的感覺...... – elgonzo
可能他想要一個片段來讀取屬性和值,而不需要編寫增加他的代碼的屬性名稱。這是我的猜測...所以,我們需要源對象,類型和結構。 –
@AndrewPaes,我幾乎建議在評論中使用反射。但是,在我看來,200多個房產看起來有點太古怪,不值得面子。正如你所說,有可能涉及其他類型/結構/數據集,而不僅僅是屬性... – elgonzo