我使用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
已知类T
是Country
个对象。
为什么realm.CreateObject<T>();
无法投出?
你能告诉我如何解决。
答案 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
}
}