不能隐式转换ConsoleSandbox类型.将StudentName转换为int
本文关键字:转换 StudentName int ConsoleSandbox 不能 类型 | 更新日期: 2023-09-27 17:49:33
好的,我是新手,我有一个简单的问题。我有一个类
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
在main方法中,我尝试调用如下内容:
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();
}
}
我不把object赋值给另一个var的原因是,有时我有不同的方法重载,它们接受不同的形参。
是否有方法将int转换为object?或者其他有意义的方法?
这两行
int number = 123;
var result = number;
告诉编译器result
的类型是int
。在编译时设置。
result = new StudentName
尝试给result分配StudentName
。这不能工作,因为它已经具有int
类型。
当你可以先分配一个整数,然后分配一个StudentName给同一个变量通过改变它的类型为object
object result = number;
闻起来像是糟糕的程序设计。
注意这一行
System.Console.WriteLine(result);
如果result
仍然是整数,将工作。如果你把它改成object,它就会打印出System。对象(或非常类似的东西)。如果你最终改变你的程序设计,使用类型StudentName,你可以覆盖ToString()在该类提供有意义的输出,例如
public class StudentName
{
/* Rest of the class here */
public override ToString()
{
return FirstName + " " + LastName + " ID: " + ID;
}
}
我不把object赋值给另一个var的原因是,有时我有不同的方法重载,它们接受不同的形参。
我不太确定你想要完成什么,但是看看c#泛型。它们允许您编写一次可以适用于各种类型的代码,然后指定使用泛型类的确切类型。
将var result = number;
更改为object result = number;
。
使用var
并不意味着您可以在运行时切换变量的类型,它仅仅意味着编译器在编译时确定变量的类型。由于您将int
赋值给result,因此它将result键入为int
。当你试图将StudentName
赋值给该变量时,它抛出了一个异常,因为它无法将StudentName
转换为int
。
由于所有对象都继承自object
,因此将result
作为对象类型应该可以解决这个问题。
即使使用var
,您不再需要用类型声明变量,编译器仍然会为它"分配"类型。你不能为不同的类型重用任何变量。
我不明白你的论点,不同的方法重载阻止你使用不同的变量。为不同的东西重用变量会使你的代码非常难以读懂。
我同意其他人的看法:将var更改为您真正想要使用的类型。这是你最好学会理解类型的方法。
var对于。net新版本中的一些新特性是必需的,但首先你应该了解一些基础知识。
当你只初始化一个对象一次时,var对于很长的类名很有用:
BufferedFileInputStream myStream = new BufferedFileInputStream;
与
var myStream = new BufferedFileInputStream;
这只是一个方便阅读的捷径。你不应该用myStream做其他事情。