假设我有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
{
}


当我登录到stdout时,首先使用JsonConvert通过执行LogDescriptor反序列化为JsonConvert.DeserializeObject<LogDescriptor>(data);类。一旦找出合适的LogLevel,然后根据级别是Info还是Error的类型,将其转换为子类之一。是否可以通过使用简单的演员表来做到这一点?

我一直在尝试:

if (log.level == LogLevel.Info)
{
    log = (InfoLogDescriptor)log;
}
else
{
    log = (ErrorLogDescriptor)log;
}


但是我一直在看到来自Visual Studio的消息说:


  无法将类型'InfoLogDescriptor'隐式转换为'LogDescriptor'。
  存在显式转换(您是否缺少演员表?)

最佳答案

您的变量是类型为logLogDescriptor,并且您正在尝试为其分配tpye InfoLogDescriptor的对象,由于它是子类,因此无法指定。

改为这样做:

if (log.level == LogLevel.Info)
{
    var newloggger = (InfoLogDescriptor)log;
}
else
{
    var newloggger = (ErrorLogDescriptor)log;
}

关于c# - 沦落为 child 类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57695216/

10-12 22:28