我想在一个属性中返回多个变量
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
答案 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)
这就是为什么
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;