更改列表中包含的类成员的值

时间:2012-10-10 17:38:36

标签: c#

我有这个课程Variables

public class Variables
{

    public enum DataType
    {
        INT, CHAR, BOOL, FLOAT
    }

    public string Name { get; set; }
    public DataType Type { get; set; }
    public object Value { get; set; }

    public Variables(string name, DataType type, object value)
    {
        Name = name;
        Type = type;
        Value = value;
    }

}

还假设Name 唯一。在另一个类中,我有一个变量列表List<Variables>

public void Main()
{
    List<Variables> varList = new List<Variables>();
    varList.Add(new Variables("x",DataType.BOOL, true));
    varList.Add(new Variables("y",DataType.BOOL, false));
    varList.Add(new Variables("z",DataType.BOOL, true));
    varList.Add(new Variables("a",DataType.INT, 1));
    varList.Add(new Variables("b",DataType.INT, 10));

    // I need this to convert into LiNQ.
    foreach (Variables _x in varList)
    {
        if (_x.Name == "z")
        {
            _x.Value = false;
        }
    }
}

如何将foreach转换为LiNQ?我尝试了.Where.Select,但他们返回IEnumerable。是否有LinQ方法只返回与给定条件匹配的单个值?例如,

Variables _var = varList.MethodName(LambDa Expression).....

3 个答案:

答案 0 :(得分:3)

可以使用Single

varList.Single(x => x.Name == "z").Value = false;

如果恰好只有一个匹配以外的其他内容,则会失败。

备选方案有SingleOrDefaultFirstOrDefaultFirstLastOrDefaultLast。例如,如果您期望&#34; 0或1&#34;结果:

var match = varList.SingleOrDefault(x => x.Name == "z");
if (match != null)
{
    match.Value = false;
}

答案 1 :(得分:2)

var variablesInstance = varList.Where(v => v.Name == "z").FirstOrDefault();
if(variablesInstance != null)
{
    variablesInstance.Value = false;
}

如果您知道存在该名称,则可以使用First而不是FirstOrDefault。

答案 2 :(得分:1)

您也可以使用First

varList.First(a => a.Name == "z").Value = false;