Array.Find <列表<状态>&GT;错误:列表<status>不包含&#39; StatusID&#39;

时间:2016-11-10 14:28:58

标签: c# arrays find

我试图找到类似的问题..我想知道是否有人可以用我的代码指出这个缺陷。我有List statusesStatus类,该类看起来像这样:

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;无法从使用中推断出来。尝试明确指定类型参数

2 个答案:

答案 0 :(得分:6)

var result = statuses.FirstOrDefault(x=> x.StatusID == inputStatusID);

string statusDescr = result?.StatusDescr;

你需要这样的东西。

点击dotnet fiddle

答案 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;