我有这个课程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).....
答案 0 :(得分:3)
你可以使用Single
:
varList.Single(x => x.Name == "z").Value = false;
如果恰好只有一个匹配以外的其他内容,则会失败。
备选方案有SingleOrDefault
,FirstOrDefault
,First
,LastOrDefault
和Last
。例如,如果您期望&#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;