假设我有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'。
存在显式转换(您是否缺少演员表?)
最佳答案
您的变量是类型为log
的LogDescriptor
,并且您正在尝试为其分配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/