Monotouch:将Object转换为NSObject

时间:2011-04-14 13:54:43

标签: object xamarin.ios type-conversion nsobject

如何将Object实例转换为NSObject?

我从

创建了一个NSDictionary
NSDictionary.FromObjectAndKey();

这个方法想要一个NSObject,但我有传入的自定义对象:

int key = 2341;
var val = new MyClass();
NSDictionary.FromObjectAndKey(val, key); // obviously it does not work!!

如何解决这个问题?提前谢谢。

3 个答案:

答案 0 :(得分:13)

您无法将任意对象转换为NSObject。 NSObject.FromObject将尝试将常见数据类型(如数字,字符串,矩形,点,变换和一些其他.NET类型)包装到其等效的NSObject类型中。

在您的特定示例中,“MyClass”必须先从NSObject派生,然后才能在NSDictionary中使用它。

答案 1 :(得分:9)

我能找到的最简单的解决方案是将.Net对象包装在NSObject中,然后根据需要展开。

public class NSObjectWrapper : NSObject
{
    public object Context;

    public NSObjectWrapper (object obj) : base()
    {
        this.Context = obj;
    }

    public static NSObjectWrapper Wrap(object obj)
    {
        return new NSObjectWrapper(obj);
    }
}

使用示例:

// wrap
var myNSObj = NSObjectWrapper.Wrap(new MyClass());
// unwrap
var myObj = myNSObj.Context as MyClass;

答案 2 :(得分:2)

这是方式:

NSDictionary.FromObjectAndKey(NSObject.FromObject(val), NSObject.FromObject(key));