1

我有这门课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;
        }
    }
}

我怎样才能转换foreachLiNQ?我试过了.Where.Select但他们回来了IEnumerable。是否有一种LinQ方法只返回与给定条件匹配的单个值?例如,

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

3 回答 3

3

那么你可以使用Single

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

但是,如果除了一场比赛之外还有其他任何事情,那将失败。

替代品是SingleOrDefaultFirstOrDefaultFirst和。例如,如果您期望“0 或 1”结果:LastOrDefaultLast

var match = varList.SingleOrDefault(x => x.Name == "z");
if (match != null)
{
    match.Value = false;
}
于 2012-10-10T17:39:53.823 回答
2
var variablesInstance = varList.Where(v => v.Name == "z").FirstOrDefault();
if(variablesInstance != null)
{
    variablesInstance.Value = false;
}

You can use First instead of FirstOrDefault if you know the thing exists with that name.

于 2012-10-10T17:41:32.860 回答
1

You can use also First

varList.First(a => a.Name == "z").Value = false;
于 2012-10-10T17:43:10.830 回答