gpt4 book ai didi

c# - 不能在 NSSet 中使用类

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:20:45 26 4
gpt4 key购买 nike

我正在尝试为 Xamarin 的 iOS 框架创建绑定(bind),但它在某些 NSSet 属性的泛型类型上遇到了困难:

// @interface Foo : NSObject
[BaseType(typeof(NSObject))]
interface Foo
{ ... }

// @interface Bar : NSObject
[BaseType(typeof(NSObject))]
interface Bar
{
// @property (readonly, nonatomic) NSSet<Foo *> * _Nonnull foos;
[Export("foos")]
NSSet<Foo> foos { get; }
}

产生错误

Error CS0311: The type 'Namespace.Foo' cannot be used as type parameter 'TKey' in the generic type or method 'NSSet'. There is no implicit reference conversion from 'Namespace.Foo' to 'ObjCRuntime.INativeObject'.

我不明白错误是因为Foo类是基于NSObject的,为什么会产生这个错误?

最佳答案

Foundation.NSSet<TKey> Class 声明为

[Foundation.Register("NSSet", SkipRegistration=true)]
public sealed class NSSet<TKey> : NSSet, IEnumerable<TKey>
where TKey : class, INativeObject

即,您的混凝土 TKey必须是实现 INativeObject 的类. Foo才不是。如果你改变 Foo

interface Foo : INativeObject
{ }

...编译器错误消失。


where TKey : class, INativeObject(generic) Type Parameter Constraint .它告诉您 TKey 的类型参数必须是通过 class 的引用类型关键字并且它必须实现接口(interface) INativeObject .

关于c# - 不能在 NSSet<TKey> 中使用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52666538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com