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;
        }
    }
}

どうすれば変換できforeachますLiNQか?試しまし.Where.Selectが、戻ってきIEnumerableます。LinQ特定の条件に一致する単一の値のみを返すメソッドはありますか?例えば、

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

3 に答える 3

3

さてあなたは使うことができますSingle

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

ただし、一致するものが1つ以外の場合は、失敗します。

選択肢はSingleOrDefault、、、、およびです。たとえば、「0または1」の結果が予想される場合:FirstOrDefaultFirstLastOrDefaultLast

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;
}

その名前で物が存在することがわかっている場合は、FirstOrDefaultの代わりにFirstを使用できます。

于 2012-10-10T17:41:32.860 に答える
1

Firstも使用できます

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