簡體   English   中英

“ MyObject []”必須是具有公共無參數構造函數的非抽象類型,才能將其用作參數“ T”

[英]'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM