我试图找到类似的问题..我想知道是否有人可以用我的代码指出这个缺陷。我有List
statuses
类Status
类,该类看起来像这样:
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'
显然这是因为StatusID存在于Status类型而不是List<Status>
。
如果我将其更改为Array.Find<Status>
,则会在statuses
上收到错误消息:
`无法转换为&#39; ...列表&lt; ... DataTypes.View.Status&gt;&#39; to&#39; ... DataTypes.View.Status []&#39;。
基本上我不在乎statuses
是List,数组,动态等等。我只想从Status对象中检索StatusDescr并使用匹配的StatusID。
关于数据类型的任何想法?我应该使用除Array.Find
以外的其他内容吗?
修改
如果我在Find
之后取出数据类型:
Array.Find(statuses, item => item.StatusID == inputStatusID).StatusDescr;
我在Find
上收到错误说:方法的类型参数&#39; Array.Find(T [],Predicate)&#39;无法从使用中推断出来。尝试明确指定类型参数
答案 0 :(得分:6)
var result = statuses.FirstOrDefault(x=> x.StatusID == inputStatusID);
string statusDescr = result?.StatusDescr;
你需要这样的东西。
答案 1 :(得分:1)
Array.Find
期望数组作为第一个参数,但是您有一个列表而不是数组。您可以从List中获取数组,但最好使用First
LINQ扩展方法:
List<Status> statuses = Status_Get(inputAction, dataDef);
var inputStatusID = fooData["StatusID"];
string statusDescr = statuses.First(item => item.StatusID == inputStatusID).StatusDescr;