![](/img/trans.png)
[英]T must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TModel' in the generic type or method
[英]'MyObject[]' must be a non-abstract type with a public parameterless constructor to use it as parameter 'T'
在MyRequest類中,我有:
public static T RetrieveData<T>(Uri uri) where T : class, new()
{
return requestData<T>(query);
}
Uri返回一個字符串數組,例如:
{
"prop1": "JOHN",
"prop2": "JULIE",
"value": 9
},
{
"prop1": "KATE",
"prop2": "Ryan",
"value": 8
}
這就是我調用方法的方式:
var obj = MyRequest.RetrieveData<MyObject[]>("http://.....");
這是MyObject的定義方式:
public class MyObject
{
public string prop1;
public string prop2;
public double value;
}
這是我得到的錯誤:
MyObject []'必須是具有公共無參數構造函數的非抽象類型,才能在通用類型或方法'MyRequest.RetrieveData(uri)'中將其用作參數'T'。
當我調整uri以返回僅包含1個元素的數組並調用它時,我得到了工作得很好的方法:
var obj = MyRequest.RetrieveData<MyObject>("http://.....");
代替
MyObject[]
但是我真的需要使用數組。 有什么想法嗎?
碰巧類型T []是固定大小的數組,並且沒有無參數構造函數。 顯而易見,固定大小的數組需要此大小 。 例如:
var foo = new bar[0];
var foo = new bar[123];
var foo = new bar[count];
您無法初始化這樣的內容:
var foo = new bar[]();
var foo = new bar[];
因此很顯然,new()量詞不能與固定大小的數組一起使用。
您應該嘗試反序列化到List<T>
而不是數組,因為您的JSON庫(可能是JSON.Net,但是很難從您的代碼中猜測)要求該類型具有構造函數。 例如:
var obj = MyRequest.RetrieveData<List<MyObject>>("http://.....");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.