如何在属性中返回多个变量

时间:2019-09-04 09:46:53

标签: c# asp.net

我想在一个属性中返回多个变量

public class Cars
{
    public object value { get; set; }
    public bool worked { get; set; }
}

public Cars GetCar(object value, Cars c)
{
   c.value = value;
   return c;
}

public void Main(string[] args)
{
   Cars c = new Cars();
   string mycar = "ABC-12";
   int mycar2 = 123;

   if (GetCar(mycar, c).value == "ABC") // working
       GetCar(mycar, c).worked = false;

   if (GetCar(mycar, c).value == 1) // error
       GetCar(mycar, c).worked = false;
}

因此,如果对象是可以工作的字符串,但是如果我使用该int,则会得到该异常

  

==运算符不能应用于“对象”和“整数”操作数

注意:我不想每次都使用Convert.to

6 个答案:

答案 0 :(得分:3)

您可以使用object.Equals方法,这将首先将两个操作数都转换为object

        if (object.Equals(GetCar(mycar, c).value,"ABC")) // working
            GetCar(mycar, c).worked = false;

        if (object.Equals(GetCar(mycar2, c).value,1)) // compiles, and does not throw exception
            GetCar(mycar2, c).worked = false;

答案 1 :(得分:1)

mycar的类型为object。设置string mycar = "ABC-12"时,将其显式设置为string类型。 因此,一旦将其与int值进行比较,就会获得异常。

这也应该有所帮助:if (<object> == <int>)

答案 2 :(得分:0)

我想你只是想念演员。另一方面,我必须质疑您的代码-您要实现什么?您所做的事情对我来说意义不大。

    public class Cars
    {
        public object value { get; set; }
        public bool worked { get; set; }
    }

    public Cars GetCar(object value)
    {
        Cars c = new Cars();
        c.value = value;
        return c;
    }

    public void Main(string[] args)
    {
        string mycar = "ABC-12";
        int mycar2 = 123;

        if ((string)GetCar(mycar).value == "ABC")
            GetCar(mycar).worked = false;

        if ((int)GetCar(mycar2).value == 1) // changed mycar to mycar2 and 
                                            // added a cast to int
            GetCar(mycar2).worked = false;
    }

答案 3 :(得分:0)

您可以尝试像这样编辑测试:

object tmp = GetCar(mycar2,2).value;
if ((tmp as int?) != null && (int)tmp == 1)
            GetCar(mycar2,2).worked = false;

现在,仅当您的商品实际上是整数时,您才进行投射。

如果您愿意用一行代码来完成它:

int? temp2 = 0;
if ((temp2 = (GetCar(mycar2,2).value as int?)).HasValue && temp2 == 1)
    GetCar(mycar2,2).worked = false;

L-

答案 4 :(得分:0)

例如,如果要同时使用string和int,则可以创建两个值。

nom

这将起作用,但这不是一个好的解决方案。我需要有关该项目的更多信息,以便能够创建一个好的设计。

答案 5 :(得分:0)

  • 工作,因为“ Class Cars”是引用类型,即对象, String 也是引用类型,即对象
  • 不起作用,因为“类别汽车”是引用类型即对象,而 Int 值类型即对象

这就是为什么

    string mycar = "ABC-12";
    int mycar2 = 123;

    if (GetCar(mycar).value == "ABC") // working because reference type==reference type
        GetCar(mycar).worked = false;

    if (GetCar(mycar).value == 1) // error because reference type=value type
        GetCar(mycar).worked = false;

我认为条件应该是第二种

    if (GetCar(mycar2).value == 1) 
     GetCar(mycar2).worked = false;