Looking for c# Keywords? Try Ask4Keywords

C# Language как


пример

Ключевое слово as - это оператор, похожий на приведение . Если бросок невозможен, использование создает as null а не приводит к InvalidCastException .

expression as type эквивалентно expression is type ? (type)expression : (type)null с оговоркой , что , as действует только на ссылочные преобразования, обнуляемого преобразования и преобразования бокса. Определенные пользователем преобразования не поддерживаются; вместо этого следует использовать обычный литой состав.

Для расширения выше компилятор генерирует код таким образом, что expression будет оцениваться только один раз и использовать проверку одного динамического типа (в отличие от двух в примере выше).

as может быть полезно при ожидании аргументации для облегчения нескольких типов. В частности , она предоставляет многочисленные пользовательские опции - вместо того , чтобы проверять каждую возможность с is перед заливкой, или просто литья и отлова исключения. Лучше всего использовать «как» при кастинге / проверке объекта, который вызовет только одно неуправляемое наказание. Использование is в проверке, тогда литье приведет к двум неуправляемым штрафам.

Если ожидается, что аргумент будет экземпляром определенного типа, регулярный листинг предпочтителен, так как его цель более понятна читателю.

Так как вызов , as может привести к null , всегда проверить результат , чтобы избежать NullReferenceException .

Пример использования

object something = "Hello";
Console.WriteLine(something as string);        //Hello
Console.Writeline(something as Nullable<int>); //null
Console.WriteLine(something as int?);          //null

//This does NOT compile:
//destination type must be a reference type (or a nullable value type)
Console.WriteLine(something as int);

Живая демонстрация на .NET скрипке

Эквивалентный пример без использования , as :

Console.WriteLine(something is string ? (string)something : (string)null);

Это полезно при переопределении функции Equals в пользовательских классах.

class MyCustomClass
{

    public override bool Equals(object obj)
    {
        MyCustomClass customObject = obj as MyCustomClass;

        // if it is null it may be really null
        // or it may be of a different type
        if (Object.ReferenceEquals(null, customObject))
        {
            // If it is null then it is not equal to this instance.
            return false;
        }

        // Other equality controls specific to class
    }

}