我目前正在将 Blazor 项目迁移到 C# 10 附带的 .NET6。使用新语言版本时,我收到包含以下代码的警告:
if (tmp is null)
oldValue = "";
else
oldValue = tmp.ToString();
Run Code Online (Sandbox Code Playgroud)
警告是:CS8600“将 null 文字或可能的 null 值转换为不可为 null 的类型”。
tmp属于 类型object?。这就是我在 if 子句中检查它是否为空的原因。我注意到出现了很多这种类型的警告。
那么这背后的原因是什么呢?帮助页面尚不包含任何信息。(看这里)
问题来源:我有一个通用组件来显示数据。数据可能来自不同的数据模型。为了统一组件内部的访问,我创建了一个IOne由所有类实现的接口。为了从应用程序中抽象出数据访问层,我为每个数据模型使用了接口。因此,每个数据显示模型都实现了该IOne接口以及另外一个数据模型接口。接口:
public interface IOne
{
public int idNameOne { get; set; }
}
public interface DataModelOne
{
public int anotherNameForId{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的班级中,我希望两个成员都对一个属性感到满意。我目前的解决方案如下:
public class Implementation : IOne, DataModelOne
{
private int _id;
public idNameOne { get { return _id; } set { _id = value; } }
public anotherIdName { get { return _id; } set { _id = value; } }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法声明一个属性同时满足两个成员?什么是干净的解决方案?