为什么我不能在realm-dotnet中使用泛型类?

时间:2016-06-16 00:00:02

标签: c# realm xamarin-studio

我使用Realm dotnet。 我为任何对象编写了泛型类。

这是我的通用课程。

public class Controller<T> where T : RealmObject, new()
{
    private Realm realm;
    public Controller()
    {
        this.realm = Realm.GetInstance();
    }

    public void Insert(T selfObj)
    {
        this.realm.Write(() => 
            {
                Debug.WriteLine(typeof(T)); // => "Country".


                // ERROR: System.InvalidCastException has been thrown Specified cast is not valid.
                var obj = this.realm.CreateObject<T>();

                // TODO: write later.
            }
    }
}

模特课在这里。

public class Country : RealmObject
{
    public string Name { get; set; }
}

而且,我这样打电话。

    var cc = new Controller<Country>();
    Country newCon = new Country()
    {
        Name = "Japan"  
    };

    var newCon2 = new Country()
    {
        Name = "Korea"  
    };

    cc.Insert(newCon);

System.InvalidCastException has been thrown Specified cast is not valid. 发生了错误。

我的Controller已知类TCountry个对象。 为什么realm.CreateObject<T>();无法投出?

你能告诉我如何解决。

1 个答案:

答案 0 :(得分:1)

<强>更新

该问题已通过电子邮件解决。真实班级Country来自中间Model班级,该班级依次从RealmObject下降。

目前我们不支持以这种方式继承。它记录在我们的help中。

我们可能会转而使用接口而不是基类。有git issue discussing this

<强>原始

首先,我无法使用当前0.76.1版本的Realm重现您的异常。

使用像这样的独立对象可以解决问题。我们还不支持与其他对象有关系的独立对象(请参阅this IList issue)。

您的代码示例的一个小改动。要传递独立创建的RealmObject并将其复制到Realm中,您只需使用Manage即可。例如:

public class Controller<T> where T : RealmObject, new()
{
    private Realm realm;
    public Controller()
    {
        this.realm = Realm.GetInstance();
    }

    public void Insert(T selfObj)
    {
        this.realm.Write(() => 
            {
                Debug.WriteLine(typeof(T)); // => "Country".

                this.realm.Manage<T>(selfObj);
            }
        );  // closing paren was missing above too
    }
}