PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ایجاد خروجی از روی لیستی جنریک از Structure های متفاوت



آبجی
14th February 2010, 12:10 AM
یک متد کلی برای ایجاد خروجی متنی از لیستهای یک برنامه که مقادیر اون با ; تفکیک شده‌اند، می خوام بنویسم.
ورودی این متد لیستی هست که آیتمهاش از نوع یک استراکچر که توسط من( برنامه نویس) تعریف شده، هستن. اما مشکل اینجاست که در حال حاضر توی برنامه حداقل ۵ نوع لیست متفاوت وجود داره که استراکچر آیتمهاشون با هم متفاوته اما همشون باید یه خروجی متنی داشته باشن. تعداد پراپرتی های این استراکچرها هم با هم متفاوته. امکان داره تعداد این لیست ها در طول توسعه برنامه افزایش پیدا کنه، پس کاملا منطقی هست که یک متد واحد نوشته بشه و تمام این لیستها به این متد واحد فرستاده بشن تا خروجی متنی ازشون دریافت بشه.
حالا، من در واقع یه متد می خوام که در هر سطر فایل متنی، داده های یک آیتم نوشته بشه و در هر سطر، داده های اون آیتم با ; از هم جدا بشن.
تابع مورد نظر رو به شکل ذیل نوشتم:
public struct PersonRecords
{
public string Name;
public string Family;
public int Age;
}

public struct ProductsRecords
{
public string ProductName;
public double ProductPrice;
}

private string GenerateOutput(IList stru)
{
List<object> tempList = new List<object>();

foreach (var struItem in stru)
{
tempList.Add(struItem);
}

StringBuilder sb = new StringBuilder();

FieldInfo[] headerFields = tempList[0].GetType().GetFields();
Array.ForEach(headerFields, f => sb.Append(f.Name + ";"));
sb = sb.Remove(sb.Length - 1, 1);
sb = sb.Insert(sb.Length, Environment.NewLine);

Array.ForEach(tempList.ToArray(), strItem =>
{
FieldInfo[] fields = strItem.GetType().GetFields();
Array.ForEach(fields, f => sb.Append(f.GetValue(strItem) + ";"));
sb = sb.Remove(sb.Length - 1, 1);
sb = sb.Insert(sb.Length, Environment.NewLine);
});

return sb.ToString();
}

protected void Page_Load(object sender, EventArgs e)
{
List<PersonRecords> lst1 = new List<PersonRecords>();

PersonRecords stru1;
stru1.Name = "Behrouz";
stru1.Family = "Rad";
stru1.Age = 120;

PersonRecords stru2;
stru2.Name = "Hasan";
stru2.Family = "Kachal";
stru2.Age = 6;

lst1.Add(stru1);
lst1.Add(stru2);
string result = this.GenerateOutput(lst1);

StreamWriter sw = new StreamWriter(@"C:\Report.txt");
sw.Write(result);
sw.Close();
} موفق باشید.

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد