List with main item
הרבה פעמים יש לנו List של אובייקטים שאחד מהם אמור להיות האובייקט הראשי, לדוגמא רשימת טלפונים, רשימת אנשי קשר וכדומה.
כדי לתמוך בזה בקלות בלי להצטרך בכל פעם לכתוב פונקצייה המחזירה את האובייקט הראשי כתבתי את הקוד הבא:
public interface IItemWithMain
{
bool IsMain { get; set; }
}
public class ListWithMain<T> : List<T> where T : IItemWithMain
{
public T MainItem
{
get
{
return this.FirstOrDefault(x => x.IsMain);
}
set
{
var mainItem = MainItem;
if (mainItem != null)
{
mainItem.IsMain = false;
}
value.IsMain = true;
}
}
}
public class Person : IItemWithMain
{
public int Id { get; set; }
public bool IsMain { get; set; }
}
כעת השימוש בקוד הזה יהיה פשוט ביותר
static void Main(string[] args)
{
ListWithMain<Person> list = new ListWithMain<Person>();
list.Add(new Person() { Id = 1 });
list.Add(new Person() { Id = 2, IsMain = true });
list.Add(new Person() { Id = 3 });
Person p = list.MainItem;
list.MainItem = list.First(x => x.Id == 1);
}
אפשר לראות שאפשר בקלות להוסיף אלמנטים לרשימה, לקבל את הרכיב שמוגדר כראשי, ולשנות את הלאמנט הראשי.