as (C# リファレンス)as (C# Reference)

as 演算子を使用して、互換性のある参照型または null 許容型間で特定の型変換を実行できます。You can use the as operator to perform certain types of conversions between compatible reference types or nullable types. 次のコードは一例を示しています。The following code shows an example.

class csrefKeywordsOperators
{
    class Base
    {
        public override string  ToString()
        {
             return "Base";
        }
    }
    class Derived : Base 
    { }

    class Program
    {
        static void Main()
        {

            Derived d = new Derived();

            Base b = d as Base;
            if (b != null)
            {
                Console.WriteLine(b.ToString());
            }

        }
    }
}

この例のように、変換が成功したかどうかを確認するには、as 式の結果を null と比較する必要があります。As the example shows, you need to compare the result of the as expression with null to check if a conversion is successful. C# 7.0 以降は、is 式を使用して変換が成功したことをテストし、変換が成功したときに条件付きで変数を割り当てることができます。Beginning with C# 7.0, you can use the is expression both to test that a conversion succeeds and conditionally assign a variable when the conversion succeeds. 多くのシナリオでは、as 演算子を使用するよりも簡潔です。In many scenarios, it's more concise than using the as operator. 詳細については、is 演算子の記事の「型パターン」セクションを参照してください。For more information, see the Type pattern section of the is operator article.

コメントRemarks

as 演算子はキャスト演算と似ています。The as operator is like a cast operation. ただし、変換が可能でない場合、as は例外を発生させる代わりに null を返します。However, if the conversion isn't possible, as returns null instead of raising an exception. 次に例を示します。Consider the following example:

expression as type  

このコードは次の式と同等ですが、expression 変数は 1 回しか評価されません。The code is equivalent to the following expression except that the expression variable is evaluated only one time.

expression is type ? (type)expression : (type)null  

なお、as 演算子は、参照変換、null 許容変換またはボックス変換のみ実行します。Note that the as operator performs only reference conversions, nullable conversions, and boxing conversions. as 演算子は、ユーザー定義変換など、他の変換を実行できないため、ユーザー定義変換を実行するには、代わりにキャスト式を使用します。The as operator can't perform other conversions, such as user-defined conversions, which should instead be performed by using cast expressions.

Example

class ClassA { }
class ClassB { }

class MainClass
{
    static void Main()
    {
        object[] objArray = new object[6];
        objArray[0] = new ClassA();
        objArray[1] = new ClassB();
        objArray[2] = "hello";
        objArray[3] = 123;
        objArray[4] = 123.4;
        objArray[5] = null;

        for (int i = 0; i < objArray.Length; ++i)
        {
            string s = objArray[i] as string;
            Console.Write("{0}:", i);
            if (s != null)
            {
                Console.WriteLine("'" + s + "'");
            }
            else
            {
                Console.WriteLine("not a string");
            }
        }
    }
}
/*
Output:
0:not a string
1:not a string
2:'hello'
3:not a string
4:not a string
5:not a string
*/

C# 言語仕様C# Language Specification

詳細については、「C# 言語仕様」の as 演算子に関するセクションを参照してください。For more information, see The as operator in the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also