2015-05-18 2 views
-1

Хорошо, я новичок в этом, и у меня есть простой вопрос. У меня есть классНевозможно неявно преобразовать тип ConsoleSandbox.StudentName в int

public class StudentName 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int ID { get; set; } 
} 

И основной метод Im пытается вызвать что-то вроде:

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

Причина я не присвоить объект другому ВДП, что иногда у меня есть различные методы перегрузки, которые принимают разные параметры.

Есть ли способ конвертировать int в объект? Или любой способ сделать это, что важно?

+0

Вы всегда можете найти способ застрелить себя на ногах. Почему вы хотите сделать такую ​​глупость? Существует большая разница между целым числом и ссылкой на объект. Будьте в безопасности и используйте правильные переменные. – Steve

ответ

5

Эти две линии

int number = 123; 
var result = number; 

сказать компилятору, что result имеет тип int. То есть во время компиляции.

Эта линия

result = new StudentName 

попытки назначить StudentName привести. Это не может работать, потому что у него уже есть тип int.

В то время как вы можете первым присвоить целое число, а затем StudentName к одной и той же переменной, изменив тип объекта

object result = number; 

что пахнет плохой дизайн программы.

Обратите внимание, что эта линия

System.Console.WriteLine(result); 

будет работать, если result по-прежнему является целым числом. Если вы измените его на объект, он просто распечатает System.Object (или что-то очень похожее). Если вы в конечном итоге измените свой дизайн программы таким образом, чтобы вы использовали тип StudentName, вы можете переопределить ToString() в этом классе для обеспечения значимого вывода, например.

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

Причина я не присвоить объект другому вар, что иногда у меня есть различные методы перегрузки, которые принимают различные параметры.

Я не совсем уверен, что вы пытаетесь выполнить, но посмотрите на C# Generics. Они позволяют вам писать код один раз, который может работать для широкого круга типов, а затем указать точный тип, в котором вы используете общий класс.

2

Изменить var result = number;object result = number;.

Использование var не означает, что вы можете переключать тип переменной во время выполнения, это просто означает, что компилятор определяет тип переменной во время компиляции. Поскольку у вас был присвоенный int результат, он набрал результат как int. Когда вы попытались присвоить эту переменную StudentName, она выбрала исключение, потому что она не смогла преобразовать StudentName в int.

Поскольку все объекты наследуются от object, делая result, тип объекта должен решить проблему.

+2

Хотя технически вы правы, я не думаю, что вы делаете OP в пользу, предлагая использовать «объект» для известных типов. Что, если он хочет сравнить коробку 'int' с другим' int'? –

+0

Я думаю, что вы правы, что это воняет другими проблемами, однако я не знаю, что пытается сделать OP. Я просто попытался ответить на его фактический вопрос, какая ограниченная информация была предоставлена. –

1

Несмотря на то, что с var вам больше не нужно объявлять свою переменную с типом, компилятор по-прежнему «назначает» ему тип. Вы не можете повторно использовать какую-либо переменную для другого типа.

Я не понимаю вашего аргумента, что различные перегрузки методов не позволяют использовать другую переменную. Повторное использование переменных для разных вещей делает ваш код очень нечитаемым.

0

Я согласен с другими: измените var на тип, который вы действительно хотите использовать. Вот как вам лучше научиться понимать типы.

var необходим для некоторых новых функций в новых версиях .NET - но сначала вы должны узнать об основах.

вар может быть полезным с очень длинными, когда названий класса вы просто инициализировать объект один раз:

BufferedFileInputStream myStream = new BufferedFileInputStream; 

против

var myStream = new BufferedFileInputStream; 

Это просто ярлык для лучшего чтения. Вы никогда не должны использовать myStream для чего-либо еще. Если вы это сделаете, это запах кода.

Смежные вопросы