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; }
}