C# 无法将类型ConsoleSandbox.StudentName隐式转换为int
好的,我对这一点还不熟悉,我有一个简单的问题。我有一节课C# 无法将类型ConsoleSandbox.StudentName隐式转换为int,c#,.net,C#,.net,好的,我对这一点还不熟悉,我有一个简单的问题。我有一节课 public class StudentName { public string FirstName { get; set; } public string LastName { get; set; } public int ID { get; set; } } 在主方法中,我尝试调用如下内容: public class StudentName { public string FirstName { ge
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
在主方法中,我尝试调用如下内容:
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
public class Program
{
public static void Main()
{
int number = 123;
var result = number;
if (number.Equals(123))
{
result = new StudentName
{
FirstName = "Jurand",
LastName = "Kowalsky",
ID = 183
};
}
System.Console.WriteLine(result);
Console.ReadLine();
}
}
我不将对象分配给另一个var的原因是,有时我有不同的方法重载,它们采用不同的参数
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
有没有办法把int转换成object?或者有什么重要的方法吗?改变
var结果=数字代码>至对象结果=编号代码>
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
使用var
并不意味着可以在运行时切换变量的类型,它只是意味着编译器在编译时确定变量的类型。由于已将int
分配给result,因此它将result键入int
。当您尝试将StudentName
分配给该变量时,它抛出了一个异常,因为它无法将StudentName
转换为int
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
由于所有对象都继承自对象
,因此将结果
设置为对象类型应该可以解决此问题。这两行
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
int number = 123;
var result = number;
告诉编译器result
的类型为int
。这是在编译时设置的
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
这条线
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
result = new StudentName
尝试为结果分配学生名
。这无法工作,因为它已具有类型int
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
而您可以通过将同一变量的类型更改为object,首先为该变量指定一个整数,然后为该变量指定一个StudentName
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
object result = number;
这听起来像是糟糕的程序设计
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
请注意,这一行
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
System.Console.WriteLine(result);
如果结果
仍然是整数,则将工作。如果您将其更改为object,它将只打印出System.object(或非常类似的内容)。如果最终更改了程序设计,从而使用StudentName类型,则可以重写该类中的ToString(),以提供有意义的输出,例如
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
public class StudentName
{
/* Rest of the class here */
public override ToString()
{
return FirstName + " " + LastName + " ID: " + ID;
}
}
我不将对象分配给另一个var的原因是,有时我有不同的方法重载,它们采用不同的参数
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
我不太确定你想要完成什么,但是看看吧。它们允许您编写一次适用于各种类型的代码,然后指定使用泛型类的确切类型。即使使用var
您不再需要用类型声明变量,编译器仍会“分配”类型给它。不能将任何变量重新用于其他类型
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
我不理解你的论点,即不同的方法重载会阻止你使用不同的变量。为不同的事情重用变量会使您的代码非常不可读。我同意其他观点:将var更改为您真正想要使用的类型。这就是你更好地了解类型的方法
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
对于新的.NET版本中的一些新功能来说,var是必需的,但首先您应该了解基本知识
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
当您只需初始化一次对象时,var对于非常长的类名非常有用:
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
BufferedFileInputStream myStream = new BufferedFileInputStream;
vs
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
这只是更好阅读的捷径。您不应该将myStream用于其他任何用途。如果你这样做了,那就是一种代码气味。你总能找到一种方法让自己站起来开枪。你为什么要做这么愚蠢的事?整数和对象引用之间有很大的区别。注意安全,使用适当的变量。虽然从技术上讲你是对的,但我认为你在做操作,并不是在建议对已知类型使用object
。如果他想将装箱的int
与另一个int
进行比较,该怎么办?我认为你是对的,这会带来其他问题,但是,我不知道OP想要实现什么。我只是试图用有限的信息回答他的实际问题。
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}