如何在对象内设置参数的值?

时间:2016-06-06 06:47:23

标签: c# linq

我有这个列表,我正在检查,然后创建另一个列表,其中定义不等于null。

 var new = rootObject.webWordForms
            .Where(w => w.definition != null)
            .ToList();

public class WebWordForm
{
    public string definition { get; set; }
    public string partOfSpeech { get; set; }
    public int sourceId { get; set; }
    public List<string> synonyms { get; set; }
    public List<string> typeOf { get; set; }
    public List<string> hasTypes { get; set; }
    public List<string> derivation { get; set; }
    public List<string> examples { get; set; }
}

是否有一种简单的方法可以将sourceId列表中的rootObject.webWordForms设置为值2?

3 个答案:

答案 0 :(得分:3)

您可以使用List ForEach方法执行此操作,但请注意,这与循环没什么不同。

var list = rootObject.webWordForms
            .Where(w => w.definition != null)
            .ToList();

list.ForEach(x=> x.sourceId =2);

答案 1 :(得分:3)

 var new = rootObject.webWordForms
            .Where(w => w.definition != null)
            .Select(w => new WebWordForm{
  definition = w.definition,
  partOfSpeech = w.partOfSpeech,
  sourceId = 2,
  synonyms= w.synonyms,
  typeOf = w.typeOf,
  hasTypes = w.hasTypes,
  derivation = w.derivation,
  examples = w.examples
}).ToList();

答案 2 :(得分:2)

.ForEach()上使用new,这会在列表new上重复并更新参数。

var finalList = rootObject.webWordForms
          .Where(w => w.definition != null)
          .ToList();

finalList.ForEach(n=>n.sourceId = 2);

注意 - 如果查询的最终列表是您的return,则需要在返回任何内容之前执行上述操作。

虽然我建议ForEach(),但许多文章都专注于避免它。

另一种选择,

var finalList = rootObject.webWordForms
                .Where(w => w.definition != null)
                .ToList();

finalList.All(n=>{
                 n.sourceId = 2;
                 return true;
             });