Array.Find> 错误:List 不包含“StatusID”的定义
本文关键字:List Status StatusID 定义 Find 错误 Array 包含 | 更新日期: 2023-09-27 18:17:13
我试图找到与此类似的问题。我想知道是否有人可以指出我的代码的缺陷。我有一个名为 Status
statuses
类类型的List
,该类如下所示:
public class Status
{
public int StatusID { get; set; }
public string StatusDescr { get; set; }
public string StatusType { get; set; }
}
我从SQL中检索记录数组/列表,并希望使用已知的StatusID查找StatusDescr:
List<Status> statuses = Status_Get(inputAction, dataDef);
var inputStatusID = fooData["StatusID"];
string statusDescr = Array.Find<List<Status>>(statuses, item => item.StatusID == inputStatusID).StatusDescr;
但是我在第 3 行的 item.StatusID
上收到一个错误,说: 'List<Status> does not contain a definition for 'StatusID' and no extension method 'StatusID' accepting a first argument of type 'List<Status>' could be found'
显然,这是因为状态 ID 存在于状态类型上,而不是 List<Status>
.如果我将其更改为 Array.Find<Status>
,我得到一个错误statuses
说:"无法从"转换"...列表<...DataTypes.View.Status>' 到 '...DataTypes.View.Status[]'.
基本上我不在乎statuses
是列表、数组、动态等。我只想从具有匹配状态 ID 的状态对象中检索 StatusDescr。对数据类型有什么想法吗?我应该使用除Array.Find
之外的东西吗?
编辑:如果我像这样Find
后取出数据类型:
Array.Find(statuses, item => item.StatusID == inputStatusID).StatusDescr;
我在Find
时收到一个错误:方法"Array.Find(T[],谓词("的类型参数无法从用法中推断出来。尝试显式指定类型参数
var result = statuses.FirstOrDefault(x=> x.StatusID == inputStatusID);
string statusDescr = result?.StatusDescr;
你需要这样的东西。
在这里检查dotnet小提琴
Array.Find
需要一个数组作为第一个参数,但你有一个列表而不是数组。您可以从列表中获取数组,但最好使用 LINQ 扩展方法First
:
List<Status> statuses = Status_Get(inputAction, dataDef);
var inputStatusID = fooData["StatusID"];
string statusDescr = statuses.First(item => item.StatusID == inputStatusID).StatusDescr;