不能隐式转换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?或者其他有意义的方法?

不能隐式转换ConsoleSandbox类型.将StudentName转换为int

这两行

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做其他事情。