我有以下接口,使用回调返回类型T的泛型参数...
public interface IDoWork<T>
{
T DoWork();
}
Run Code Online (Sandbox Code Playgroud)
但是我也有以下接口,但它不会调用回调,因为它返回void.
public interface IDoWork
{
void DoWork();
}
Run Code Online (Sandbox Code Playgroud)
我可以组合这两个接口并使用运行时逻辑来确定差异吗?我怎样才能做到这一点?
我正在尝试设置自定义IDictionary,它将允许Object作为我的TValue.
这是它的样子:
public class NullTolerantDictionary<TKey, TValue>
: Dictionary<TKey, TValue> where TValue : class
{
public TValue this[TKey key]
{
get
{
TValue value;
if (TryGetValue(key, out value))
{
return value;
}
else
{
return DependencyProperty.UnsetValue;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当编译它时说:
无法将类型'object'隐式转换为'TValue'.
所以为了解决这个问题,我将类型约束更改为:
where TValue : object
Run Code Online (Sandbox Code Playgroud)
(object而不是上课)
然后我收到这条消息:
约束不能是特殊类'对象'
我该如何解决这个问题?
用于解释为什么object不能成为约束的额外功劳.
Unity 开发人员如何限制从 Object 派生的泛型类型参数?
在寻找问题的答案时,我遇到了这个问题。有答案说明以下内容:
这两个约束之间没有区别,除了一个是不允许明确声明的。
证明应该不可能约束对象。在 Unity 中,我们可以看到以下方法:
public static T Instantiate<T>(T original, Vector3 position, Quaternion rotation) where T : Object;
Run Code Online (Sandbox Code Playgroud)
这是因为 Unity 使用的是 Mono 而不是 CLR 吗?