gpt4 book ai didi

c# - 为什么我不能在 realm-dotnet 中转换泛型类?

转载 作者:行者123 更新时间:2023-11-30 17:37:34 24 4
gpt4 key购买 nike

我使用 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>();无法转换?

你能告诉我如何修复吗。

最佳答案

更新

问题已通过电子邮件解决。真正的类 Country 派生自中间 Model 类,后者又派生自 RealmObject

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

我们可能会转向使用接口(interface)而不是基类。有一个 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
}
}

关于c# - 为什么我不能在 realm-dotnet 中转换泛型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37847713/

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