Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态获取keyvaluepair值_C# - Fatal编程技术网

C# 动态获取keyvaluepair值

C# 动态获取keyvaluepair值,c#,C#,这是个基本问题,但我对c#还不熟悉。我的代码基本上是这样的:如果条件A,那么在属性X上执行一个代码块。如果条件B,那么在属性Y上执行相同的代码块,依此类推。有没有一种方法可以将ValueX或ValueY作为变量调用,例如a.Value.{$propertyName},而不必为了将单个属性名a.Value.ValueX更改为a.Value.ValueY而复制代码块 public static class Conditions { public static bool A { get; se

这是个基本问题,但我对c#还不熟悉。我的代码基本上是这样的:如果条件A,那么在属性X上执行一个代码块。如果条件B,那么在属性Y上执行相同的代码块,依此类推。有没有一种方法可以将ValueX或ValueY作为变量调用,例如a.Value.{$propertyName},而不必为了将单个属性名a.Value.ValueX更改为a.Value.ValueY而复制代码块

public static class Conditions
{
    public static bool A { get; set; }
    public static bool B { get; set; }
}

public class MyObjects
{
    public int ValueX { get; set; }
    public int ValueY { get; set; }
}

public class MyCollection
{
    public Dictionary<int, MyObjects> listOfObjects = new Dictionary<int, MyObjects>();

    public static void DoConditions()
    {
        foreach( var a in listOfObjects)
        {
            if(Conditions.A)
            {
                // do code using value x
                if (a.Value.ValueX > 0)
                    continue;
            }
            else if(Conditions.B)
            {
                // do the exact same code using value Y
                if (a.Value.ValueY > 0)
                    continue;
            }
        }
    }
}
公共静态类条件
{
公共静态bool A{get;set;}
公共静态布尔B{get;set;}
}
公共类对象
{
公共int值x{get;set;}
公共int值{get;set;}
}
公共类MyCollection
{
公共字典listOfObjects=新字典();
公共静态无效文档条件()
{
foreach(listOfObjects中的变量a)
{
如果(条件A)
{
//使用x值进行编码
如果(a.Value.ValueX>0)
继续;
}
否则,如果(条件B)
{
//使用值Y执行完全相同的代码
如果(a.Value.ValueY>0)
继续;
}
}
}
}
您可以执行以下操作:

int val = 0;
if(Conditions.A)
    val = a.Value.ValueX;
else if(Conditions.B)
    val = a.Value.ValueY;

// Your code block here using "val".

创建一个变量并用适当的属性值填充它:

foreach( var a in listOfObjects)
{
    int value;
    if(Conditions.A)
        value = a.Value.ValueX;
    else
        value = a.Value.ValueY;

    if(value > 0)
        continue;
    //other code using `value`
}

您是否可以将公共代码提取到使用
a.Value.ValueX
a.Value.ValueY
调用的方法中?否,因为重复执行的代码正在嵌套字典的第二级循环,这将使它不再有用。我最终还是会复制很多代码。现在还不清楚你说的是什么意思。让你的例子代表真正的问题在这里会有所帮助。ValueX、ValueY……都是同一类型的吗?