Как изменить тип переменной в C #? - PullRequest
8 голосов
/ 05 апреля 2010

Я хотел использовать что-то вроде этого:

if(x==5)
{
    var mydb= ........ ;
}
else 
{
    var mydb = ........ ;
}

но это не сработало, потому что я не могу объявить переменную внутри оператора if.

Итак, я попытался сделать это:

var mydb;

if (x==5)
{
    mydb= ............. ;
}
else 
{
    mydb=.............;
}

но id тоже не работал, потому что мне пришлось инициализировать переменную (mydb).

Поэтому вопрос таков: я не обязательно знаю тип переменной, могу ли я все равно объявить ее и затем изменить тип внутри оператора if?

Ответы [ 7 ]

11 голосов
/ 05 апреля 2010

Нет, вы не можете. Переменные никогда не меняют свои типы. Какие типы вы на самом деле заинтересованы? Не могли бы вы объявить переменную как некоторый общий базовый тип или интерфейс, который они оба реализуют? Если вы сможете рассказать нам больше о своей ситуации, возможно, мы сможем вам помочь.

C # - это язык статической типизации (оставляя в стороне C # 4; он вводит динамическую типизацию там, где она действительно нужна, но в первую очередь стоит понять «нормальный» способ C #) Компилятор должен знать тип переменной, чтобы можно было понять, что означает каждая ссылка на нее. Например, если вы используете

string x = "text";
int y = x.Length;

компилятор должен знать, что x имеет тип string, чтобы он мог проверить, что тип имеет свойство Length, и выдать ему вызов в IL.

6 голосов
/ 05 апреля 2010

вы можете использовать:

object mydb = null;

if(x==5)
{
    mydb= ........ ;
}
else 
{
    mydb = ........ ;
}

но вы должны распаковать или привести объект обратно к правильному типу, когда вы хотите получить доступ к полям, свойствам и методам объекта. если вы не будете ждать C # 4, который может облегчить динамический вызов метода (точная терминология: динамическая отправка?)

4 голосов
/ 05 апреля 2010

C # имеет статическую типизацию, если только вы не используете 4.0 со спецификатором dynamic , поэтому изменение типа классически невозможно, за исключением полиморфизма.

1 голос
/ 05 апреля 2010

Я предполагаю, что у вас есть два несовместимых типа из двух разных библиотек, которые представляют базу данных.Вы можете написать интерфейс с общими операциями и написать адаптеры, которые обертывают классы из библиотек и реализуют ваш интерфейс.Чем тип вашей переменной mydb может быть тем интерфейсом.

Конечно, вы можете использовать object как тип для mydb и использовать динамические тесты типов и приведение, но это будет очень плохой дизайнрешение в этом случае.

1 голос
/ 05 апреля 2010

Вы можете объявить базовый тип и наследовать оба типа от него. Но главный вопрос: Как ты собираешься его использовать, если не знаешь его типа?

0 голосов
/ 01 октября 2015

Вы можете использовать как это bool result = (условие)? true: false;

var myDB = (x==5) ? true : false ;
or
var myDB = x==5 ? "doing something when case is true" : "doing something when case is false" ;
0 голосов
/ 23 октября 2012

ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ СИСТЕМА. КОНВЕРТ-КЛАСС КАК ЭТО ИЛИ ИСПОЛЬЗОВАТЬ ДИНАМИЧНЫЙ

string possibleInt = "1234"; 
int count = Convert.ToInt32(possibleInt);

ИЛИ ИСПОЛЬЗОВАТЬ Явные преобразования

В C # вы можете использовать оператор приведения для выполнения явных преобразований. Приведение определяет тип для преобразования в круглых скобках. Синтаксис для выполнения явного преобразования показан в следующем примере кода.

DataType variableName1 = (castDataType) variableName2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...