我从具有元数据信息的服务器获得回复。我有一些表,我正试图从json加载。我想要执行此操作的代码如下:
接口
public interface DALObject
{
public Object Id();
public Object Instantiate();
}
类示例:
[System.Serializable]
public class UnitClass_DAL : DALObject
{
public string GOOGLEFU_ID { get; set; }
public int _id { get; set; }
public string name { get; set; }
object DALObject.Instantiate()
{
return Instantiate();
}
object DALObject.Id()
{
return _id;
}
public int Id()
{
return _id;
}
public UnitClass Instantiate( )
{
UnitClass temp = new UnitClass();
temp.id = _id;
temp.name = name;
return temp;
}
}
在我的RemoteAPIService类中加载方法:
public void LoadMetadataResource<DALType, K, V>(IDictionary<K, V> list, string resource) where DALType: DALObject
{
++activeLoads;
var parameters = new SortedDictionary<string, string>();
parameters.Add("table", resource);
SendAPICall("tables", parameters, (successResponse) =>
{
list = JsonMapper.ToObject<List<DALType>>(successResponse).ToDictionary(temp => temp.Id() as K, temp => temp.Instantiate() as V);
--activeLoads;
}, (errorResponse) =>
{
--activeLoads;
});
}
我遇到的问题是我想打电话给这样的话:
//...
LoadMetadataResource<UnitClass_DAL, int, UnitClass>(GameDataHolder.UnitClass, "UnitClass");
//...
GameDataHolder.UnitClass的类型为:Dictionary&lt; int,UnitClass&gt;
尝试将temp.Id()转换为K或temp.Instantiate()为V时出错。我需要将其加载到GameDataHolder的特定数据类型中,而不是通用的基类类型。
这在C#中是否可行?
答案 0 :(得分:0)
Casting value to T in a generic method
事实证明&#34; as&#34;在这种情况下,不适合投射。我只能通过c风格的演员来解决我的问题:
public void LoadMetadataResource<DALType, K, V>(IDictionary<K, V> list, string resource) where DALType: DALObject
{
++activeLoads;
var parameters = new SortedDictionary<string, string>();
parameters.Add("table", resource);
SendAPICall("tables", parameters, (successResponse) =>
{
list = JsonMapper.ToObject<List<DALType>>(successResponse).ToDictionary(temp => (K)temp.Id(), temp => (V)temp.Instantiate());
--activeLoads;
}, (errorResponse) =>
{
--activeLoads;
});
}
如果不能解决这个问题,我会跟进,但看起来它会编译。