目前我有一个错误记录类,如下所示:
public class Log
{
public enum LogTypes
{
Info = 1,
Error = 2,
Warning = 3
}
public string Message { get; set; }
public LogTypes LogType { get; set; }
public Log(string Message, LogTypes LogType)
{
this.Message = Message;
this.LogType = LogType;
}
我有一个新列表的初始化器:
List<Log> LogList = new List<Log>();
如何使用LogList.Add(Message, LogType)
代替LogList.Add(new Log(Message, LogType));
?
我知道这是一个小小的改变,但我仍在学习C#并且很好奇。谢谢!
答案 0 :(得分:9)
首先,我不会这样做。这不是任何使用List<Log>
的人所期望的。不要暴露普通的List<Log>
,而是考虑创建一个Logger
类或类似的包含一个List<Log>
并公开Log(string message, LogType type)
方法,但不要实际上是暴露了List<Log>
。
如果确实希望能够直接在列表中调用Add(message, type)
,则有两种选择:
创建一个派生自List<Log>
的新类:
public LogList : List<Log>
{
public void Add(string message, LogType type)
{
Add(new Log(message, type));
}
}
请注意,这是重载(添加新方法签名但名称相同,Add
),而不是重写(为现有提供新行为) virtual
方法的签名方法 - 您需要创建LogList
而不是List<Log>
的实例:
LogList list = new LogList();
list.Add(message, type);
向List<Log>
添加扩展方法,这将有效地将该方法添加到所有 List<Log>
实例。
public static LogListExtensions
{
public static void Add(this Log<List> list, string message, LogType type)
{
list.Add(new Log(message, type));
}
}
顺便说一句,我可能也会从你的Log
类型中删除这些setter - 为什么你需要在构造后更改消息或类型?
答案 1 :(得分:1)
您可以创建自己的List
派生类,并根据需要定义新的Add
方法,例如:
public class MyListClass : List<Log>
{
public void Add(string message, Log.LogTypes logType)
{
this.Add(new Log(message, logType));
}
}
答案 2 :(得分:0)
除了保存第二或第二次打字之外,它没有任何区别。说过你总是可以实现自己的列表类并使用它。或者你可以使用扩展方法。