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# 创建一个引用另一个对象参数的变量?_C# - Fatal编程技术网

C# 创建一个引用另一个对象参数的变量?

C# 创建一个引用另一个对象参数的变量?,c#,C#,我有一个非常具体的问题。 我有一个具有相同类型的各种属性的自定义类,我在其他地方有一个方法,需要在该类上运行并比较这些属性。该方法需要能够比较这些属性,但会根据情况指示比较不同的属性 目前,我有一个开关,它使用一个字符串来确定要比较的属性: switch(field) { case "int1": if (myClass1.int1 < myClass2.int1) { //do something }

我有一个非常具体的问题。 我有一个具有相同类型的各种属性的自定义类,我在其他地方有一个方法,需要在该类上运行并比较这些属性。该方法需要能够比较这些属性,但会根据情况指示比较不同的属性

目前,我有一个开关,它使用一个字符串来确定要比较的属性:

switch(field)
{
    case "int1":
        if (myClass1.int1 < myClass2.int1)
        {
            //do something
        }
        break;
    case "int2":
        if (myClass1.int2 < myClass2.int2)
        {
            //do something
        }
        break;
}
开关(字段)
{
案例“int1”:
if(myClass1.int1
有没有一种方法可以让我只设置一个变量来引用我想要引用的类的属性,这样就可以只使用开关并让代码稍后比较属性?大概是这样的:

var referrer;
switch(field)
{
    case "int1":
        referrer = int1;
        break;
    case "int2":
        referrer = int2;
        break;
}

if (myClass1.referrer < myClass2.referrer)
{ //do something }
var参照者;
开关(现场)
{
案例“int1”:
referer=int1;
打破
案例“int2”:
referer=int2;
打破
}
if(myClass1.Referer
您可以使用
Func
方法执行此操作,例如:

public class SomeClass 
{ 
    public int First { get; set; }
    public int Second { get; set; }
}

var one = new SomeClass { First = 1, Second = 5 };
var two = new SomeClass { First = 5, Second = 1 };

Func<SomeClass, int> referrer = null;

switch (field) 
{
    case "first":
        referrer = x => x.First;
        break;
    case "second":
        referrer = x => x.Second;
        break;
}

if (referrer(one) < referrer(two))
{

}

您可以使用
Func
方法执行此操作,例如:

public class SomeClass 
{ 
    public int First { get; set; }
    public int Second { get; set; }
}

var one = new SomeClass { First = 1, Second = 5 };
var two = new SomeClass { First = 5, Second = 1 };

Func<SomeClass, int> referrer = null;

switch (field) 
{
    case "first":
        referrer = x => x.First;
        break;
    case "second":
        referrer = x => x.Second;
        break;
}

if (referrer(one) < referrer(two))
{

}

@EdwardDuffy很乐意帮助:)我只是用另一种方式编辑,虽然好吧,小问题,我尝试使用Func,但现在我收到一个错误,说>“不能应用于IComparable”。@EdwardDuffy为此,你需要使用
IComparable.CompareTo()
而不是
/
十进制和整数是否继承自IComparable?@EdwardDuffy是的,他们是:,@EdwardDuffy很乐意帮助:)我只是用另一种方式编辑,虽然好吧,小问题,我尝试使用Func,但现在我收到一个错误,说>不能应用于IComparable。@EdwardDuffy为此,你需要使用
IComparable.CompareTo()
而不是
/
十进制和整数是否从IComparable继承?@EdwardDuffy是的,它们是:,