Account account2 = account1 as Account; и Account account2 = (Account)account1; Есть различия?

1:
Account account1 = new Account();
            account1.Id = 1;
            account1.Name = "Andrew";

        

            Account account2 =  account1 as Account;
            Console.WriteLine(account2.Name);
            account1.Name = "Vasia";
            Console.WriteLine(account2.Name);


2:
Account account1 = new Account();
            account1.Id = 1;
            account1.Name = "Andrew";

        

            Account account2 =  (Account) account1;
            Console.WriteLine(account2.Name);
            account1.Name = "Vasia";
            Console.WriteLine(account2.Name);
  • Вопрос задан
  • 124 просмотра
Решения вопроса 2
MikhailD
@MikhailD
Developer
Различия есть:

1. account1 as Account
В этом случаи происходит приведение типа с проверкой. Если account1 не является типом Account, результат этого выражения будет null

2. (Account) account1
В этом случаи, если account1 не является типом Account, будет брошено исключение InvalidCastException

В вашем случаи я рекомендовал бы такой вариант:
Account account2 =  account1 as Account;
if (account2 == null)
{
    // account1 - это не Account
}
else
{
    // account1 - это Account
}
Ответ написан
Комментировать
Griboks
@Griboks Куратор тега C#
as означает, что ссылка может быть обнулена, если типы несовместимы.

У вас же вообще один тип! Надо писать account2 = account1 и все.

Если хотите скопировать значение вместо ссылки (что бы были два Андрея, на не Андрей и Вася), то надо реализовать интерфейс ICloneable. Ну или что-то похожее от себя:
account2=account1.Clone(), где
public Account Clone(){
var a = new Account();
a.name=name;
return a;}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы