Monotouch:将对象转换为NSObject

Monotouch:将对象转换为NSObject,object,xamarin.ios,type-conversion,nsobject,Object,Xamarin.ios,Type Conversion,Nsobject,如何将对象实例转换为NSObject实例 我已经从中创建了一本词典 NSDictionary.FromObjectAndKey(); 此方法需要NSObject,但我要传入自定义对象: int key = 2341; var val = new MyClass(); NSDictionary.FromObjectAndKey(val, key); // obviously it does not work!! 如何解决这个问题?提前谢谢。这是一种方式: NSDictionary.FromOb

如何将对象实例转换为NSObject实例

我已经从中创建了一本词典

NSDictionary.FromObjectAndKey();
此方法需要NSObject,但我要传入自定义对象:

int key = 2341;
var val = new MyClass();
NSDictionary.FromObjectAndKey(val, key); // obviously it does not work!!
如何解决这个问题?提前谢谢。

这是一种方式:

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

不能将任意对象转换为NSO对象。FromObject将尝试将常见的数据类型(如数字、字符串、矩形、点、变换和少数其他.NET类型)封装为等效的NSObject类型


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

我能找到的最简单的解决方案是将.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;

非常感谢。但似乎不起作用。引发异常:Obj参数不能为null。这很奇怪,因为当我打印key或val时,值就在那里!你说得对,我刚刚测试了它的编译。它无法转换。必须在NSObject派生的NSDictionary中输入键/值。int转换成功。不管这是否回答了最初的问题,它显示了如何将对象转换为NSObjects并返回。帮助很大!我很惊讶这不是一个标准的东西。