return 类型 'T? Manager<T>.Strategy.get' 中引用类型的可空性与隐式实现的成员 'T IManager<T>.Strategy.get' 不匹配
Nullability of reference types in return type 'T? Manager<T>.Strategy.get' doesn't match implicitly implemented member 'T IManager<T>.Strategy.get'
使用 C# 10 我有:
public interface IStrategy<T> where T: Options {
T Options { get; }
}
public abstract class Strategy<T> : IStrategy<T> where T : Options {
public abstract T Options { get; }
}
public interface IManager<T> where T: IStrategy<Options> {
T Strategy { get; set; }
Task Run();
}
public class Manager<T> : IManager<T> where T : IStrategy<Options> {
public String Name { get; set; }
public T? Strategy { get; set; }
public Manager(String name) {
Name = name;
}
}
我收到警告:
Nullability of reference types in return type of 'T? Manager<T>.Strategy.get' doesn't match implicitly implemented member 'T IManager<T>.Strategy.get' (possibly because of nullability attributes).
我知道 Strategy
在管理器中可能为空,因为它可能稍后设置而不是在构造函数中设置。
但策略中的选项永远不会为空。
我一直在将 T
更改为 T?
,但我总是在某处收到警告。
如何解决这个问题?
你可以,但是你在你的泛型中说你不希望 T
为空,那么你有一个 属性 其 getter (那是 T IManager<T>.Strategy.get
) 可能 return a null T
:这就是您收到的警告。仅使用托管代码而不从外部读取(除非您明确强制使用 null
),这永远不会发生(Strategy
永远不会 return null
)
你能做到:
public class Manager<T> : IManager<T?> where T : IStrategy<Options>
// Notice the ? in IManager<T?>
警告应该会消失,但想想这是否是您真正想要的(这正是可空引用类型注释的用途)
我做了一个fiddle:https://dotnetfiddle.net/ccar24
使用 C# 10 我有:
public interface IStrategy<T> where T: Options {
T Options { get; }
}
public abstract class Strategy<T> : IStrategy<T> where T : Options {
public abstract T Options { get; }
}
public interface IManager<T> where T: IStrategy<Options> {
T Strategy { get; set; }
Task Run();
}
public class Manager<T> : IManager<T> where T : IStrategy<Options> {
public String Name { get; set; }
public T? Strategy { get; set; }
public Manager(String name) {
Name = name;
}
}
我收到警告:
Nullability of reference types in return type of 'T? Manager<T>.Strategy.get' doesn't match implicitly implemented member 'T IManager<T>.Strategy.get' (possibly because of nullability attributes).
我知道 Strategy
在管理器中可能为空,因为它可能稍后设置而不是在构造函数中设置。
但策略中的选项永远不会为空。
我一直在将 T
更改为 T?
,但我总是在某处收到警告。
如何解决这个问题?
你可以,但是你在你的泛型中说你不希望 T
为空,那么你有一个 属性 其 getter (那是 T IManager<T>.Strategy.get
) 可能 return a null T
:这就是您收到的警告。仅使用托管代码而不从外部读取(除非您明确强制使用 null
),这永远不会发生(Strategy
永远不会 return null
)
你能做到:
public class Manager<T> : IManager<T?> where T : IStrategy<Options>
// Notice the ? in IManager<T?>
警告应该会消失,但想想这是否是您真正想要的(这正是可空引用类型注释的用途)
我做了一个fiddle:https://dotnetfiddle.net/ccar24