无法将类型ConsoleSandbox.StudentName隐式转换为int

Woj*_*icz -1 .net c#

好的,我是新手,我有一个简单的问题.我上课了

public class StudentName
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在主要方法中,我试图调用类似的东西:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有将对象分配给另一个var的原因是有时我有不同的方法重载,它们采用不同的参数.

有没有办法将int转换为对象?或者任何方式做到这一点?

Eri*_* J. 5

这两行

int number = 123;
var result = number;
Run Code Online (Sandbox Code Playgroud)

告诉编译器result类型int.这是在编译时设置的.

这条线

result = new StudentName
Run Code Online (Sandbox Code Playgroud)

尝试将StudentName结果分配给结果.这不起作用,因为它已经有了类型int.

虽然您可以先将一个整数,然后将StudentName分配给同一个变量,方法是将其类型更改为object

object result = number;
Run Code Online (Sandbox Code Playgroud)

闻到糟糕的程序设计.

注意这一行

System.Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

如果result仍然是整数将工作.如果将其更改为object,它将只打印出System.Object(或类似的东西).如果您最终更改程序设计以便使用StudentName类型,则可以覆盖该类中的ToString()以提供有意义的输出,例如

public class StudentName
{
    /* Rest of the class here */
    public override ToString()
    {
       return FirstName + " " + LastName + " ID: " + ID;
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有将对象分配给另一个var的原因是有时我有不同的方法重载,它们采用不同的参数.

我不确定你要完成什么,但看看C#Generics.它们允许您编写一次可以适用于各种类型的代码,然后指定使用泛型类的确切类型.