沦落为儿童班

Use*_*842 1 c#

假设我有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'。存在显式转换(您是否缺少演员表?)

Hay*_*tam 8

您的变量是log类型LogDescriptor,您正试图为其分配一个对象tpye InfoLogDescriptor,因为它是一个子类,所以您不能这样做。

改为这样做:

if (log.level == LogLevel.Info)
{
    var newloggger = (InfoLogDescriptor)log;
} 
else 
{
    var newloggger = (ErrorLogDescriptor)log;
}
Run Code Online (Sandbox Code Playgroud)