![](/img/trans.png)
[英]Getting “No parameterless constructor defined for this object.” Error while posting a viewmodel
[英]CBO.FillCollection throwing “No parameterless constructor defined for this object.” error
我正在嘗試從另一個方法返回的IDataReader中填充一個集合...由於某種原因,它不斷拋出“為此對象定義的無參數構造函數”。 此行的錯誤:
List<string> names = CBO.FillCollection<string>(DataProvider.Instance().ExecuteReader("getNames", new SqlParameter("UserId", 1)));
我已經嘗試分離出參數,所以事情會分開初始化,直到我有了這個:
List<string> names = CBO.FillCollection<string>(nameDataReader);
我在同一條線上仍然收到錯誤。
有任何想法嗎?
消息中的線索。 System.String沒有無參數構造函數,因此無法使用Activator.CreateInstance創建它,這通常用於動態創建對象。
編輯 :解決方案是直接使用閱讀器:
var strings = new List<string>();
using(var reader = DataProvider.Instance().ExecuteReader("getNames", new SqlParameter("UserId", 1)))
{
while(reader.Read())
strings.Add(reader[0] as string);
}
CBO.FillCollection
似乎與值類型有關。
已經發布了更好的答案(直接訪問閱讀器),但要了解FillCollection方法正在尋找什么,您可以用以下方法解決您的問題:
添加一個新屬性,其屬性設置為SQL列名:
class StringRow { public string Name; }
使用它傳遞給FillCollection,如:
List<string> stringCollection = new List<string>();
foreach (StringRow row in CBO.FillCollection<StringRow>(DataProvider...))
{
stringCollection.Add(row.Name);
}
它想要一個具有命名屬性的對象,它可以反射設置。 因此,即使您正在檢索int
列表, int
對象也沒有“Name”屬性(從SQL返回集中的列中拉出)來設置,在這種情況下,它將返回0的列表。
不幸的是,使用int?
並將SQL返回列設置為[Value]並不能解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.