假设我有3个用于记录的类:
internal class ErrorLogDescriptor : InfoLogDescriptor
{
public int ErrorMessage { get; set; }
public string Method { get; set; }
public string Name { get; set; }
public string RequestUrl { get; set; }
public string Stack { get; set; }
}
internal class InfoLogDescriptor
{
public int ProcessId { get; set; }
public string Hostname { get; set; }
public int Level { get; set; }
public string Time { get; set; }
public string Message { get; set; }
public int Version { get; set; }
}
internal sealed class LogDescriptor : ErrorLogDescriptor
{
}
Run Code Online (Sandbox Code Playgroud)
当我stdout第一次登录时,使用来通过JsonConvert反序列化LogDescriptor该类JsonConvert.DeserializeObject<LogDescriptor>(data);。一旦确定了合适LogLevel的级别,我便取决于级别是类型Info还是级别转换为子类之一Error。是否可以通过使用简单的演员表来做到这一点?
我一直在尝试:
if (log.level == LogLevel.Info)
{
log = (InfoLogDescriptor)log;
}
else
{
log = (ErrorLogDescriptor)log;
}
Run Code Online (Sandbox Code Playgroud)
但是我一直在看到来自Visual Studio的消息说:
无法将类型'InfoLogDescriptor'隐式转换为'LogDescriptor'。存在显式转换(您是否缺少演员表?)
您的变量是log类型LogDescriptor,您正试图为其分配一个对象tpye InfoLogDescriptor,因为它是一个子类,所以您不能这样做。
改为这样做:
if (log.level == LogLevel.Info)
{
var newloggger = (InfoLogDescriptor)log;
}
else
{
var newloggger = (ErrorLogDescriptor)log;
}
Run Code Online (Sandbox Code Playgroud)