透かしなしで本番環境でテストしてください。
必要な場所で動作します。
30日間、完全に機能する製品をご利用いただけます。
数分で稼働させることができます。
製品トライアル期間中にサポートエンジニアリングチームへの完全アクセス
C#でのプログラミングは、さまざまな種類のデータを扱うことが多い。 時々、object
が特定の型であるかどうかを確認したり、その型に変換しようと試みる必要があります。 そこで、as
演算子キーワードが役に立ちます。 その近縁であるis operator
と共に、型のテストと変換を助けます。 このチュートリアルでは、この演算子の詳細とその使用例を探求します。
as
演算子を理解するas
演算子の基本C# の as
演算子は、互換性のある参照型やヌル許容型の間で特定の変換を行うために使用される二項演算子です。以下のコードは、簡単なデモを提供します:
object myObj = "Hello, World!";
string myStr = myObj as string;
object myObj = "Hello, World!";
string myStr = myObj as string;
Dim myObj As Object = "Hello, World!"
Dim myStr As String = TryCast(myObj, String)
上記のコードでは、myObj
は object
型のオブジェクトです (C# のすべての型の基底型)。 コンパイル時に、その基礎タイプが不確定です。as
演算子は、myObj
をstring
として扱おうとするために使用されます。 成功すると、myStr
は文字列の値を保持します。 それ以外の場合、null value
が保持されます。
「as 演算子」と明示的なキャストは似たような目的を果たしますが、重要な違いがあります。 明示的なキャストが失敗すると、例外がスローされます。 一方で、as
演算子によるある型から別の型への変換が失敗した場合、演算子は例外を発生させる代わりにnull 値
を返します。 次のコード例でこれを理解しましょう:
object someValue = 12345;
// Using explicit cast
string castResult;
try {
castResult = (string)someValue; // This will throw an exception since the cast fails.
}
catch(Exception ex) {
castResult = null;
}
// Using the as operator
string asResult = someValue as string; // No exception, but asResult will be null since the cast fails.
object someValue = 12345;
// Using explicit cast
string castResult;
try {
castResult = (string)someValue; // This will throw an exception since the cast fails.
}
catch(Exception ex) {
castResult = null;
}
// Using the as operator
string asResult = someValue as string; // No exception, but asResult will be null since the cast fails.
Dim someValue As Object = 12345
' Using explicit cast
Dim castResult As String
Try
castResult = DirectCast(someValue, String) ' This will throw an exception since the cast fails.
Catch ex As Exception
castResult = Nothing
End Try
' Using the as operator
Dim asResult As String = TryCast(someValue, String) ' No exception, but asResult will be null since the cast fails.
明らかなように、as
演算子を使用することは、潜在的な実行時エラーを回避できるため、より安全であることが多いです。
しばしば、as 演算子
は型変換を試みる前に型テストを行うためにis 演算子
と一緒に使用されます。 is 演算子
は、提供されたオブジェクトが指定された型であるかどうかをチェックし、そうである場合はtrueを返し、そうでない場合はfalseを返します。
以下のコード例はこれを示しています:
object testObject = "This is a string";
if(testObject is string) {
string result = testObject as string;
Console.WriteLine(result);
} else {
Console.WriteLine("Not a string");
}
object testObject = "This is a string";
if(testObject is string) {
string result = testObject as string;
Console.WriteLine(result);
} else {
Console.WriteLine("Not a string");
}
Dim testObject As Object = "This is a string"
If TypeOf testObject Is String Then
Dim result As String = TryCast(testObject, String)
Console.WriteLine(result)
Else
Console.WriteLine("Not a string")
End If
C#の後のバージョンでパターンマッチングが導入されたことで、is
演算子は型テストが成功した場合に特定のアクションを実行することもできます。 これにより、as
演算子を使用する必要性が減少することがよくあります。
特定のケースの1つで、as
演算子が非常に価値あるのは、nullable値型の場合です。値型(例えばint
やdouble
など)はnull値
を割り当てることができません。 ただし、これらを nullable にすることで、null を割り当てることができます。 as
演算子は、null 許容値型への変換を試みるために使用できます。
int? nullableInt = 10;
object objInt = nullableInt;
int? resultInt = objInt as int?;
int? nullableInt = 10;
object objInt = nullableInt;
int? resultInt = objInt as int?;
Dim nullableInt? As Integer = 10
Dim objInt As Object = nullableInt
Dim resultInt? As Integer = CType(objInt, Integer?)
as
演算子は、関連する参照型間の参照変換とユーザー定義変換の両方をサポートします。 ユーザー定義の型変換とは、クラス内で特殊な型変換メソッドを使用して定義される型変換のことです。
ユーザー定義の変換の次のコードを考慮してください:
class Sample {
public static implicit operator string(Sample s) {
return "Converted to String";
}
}
Sample sampleObject = new Sample();
string conversionResult = sampleObject as string;
class Sample {
public static implicit operator string(Sample s) {
return "Converted to String";
}
}
Sample sampleObject = new Sample();
string conversionResult = sampleObject as string;
Friend Class Sample
Public Shared Widening Operator CType(ByVal s As Sample) As String
Return "Converted to String"
End Operator
End Class
Private sampleObject As New Sample()
Private conversionResult As String = TryCast(sampleObject, String)
ここでは、ユーザー定義の変換メソッドにより、Sample
型のオブジェクトをstring
として扱うことができます。
as
演算子は、値型(nullable 値型を扱う場合を除く)や、明示的なメソッドを伴うユーザー定義の変換には使用できないことを覚えておいてください。
as
演算子を使用した高度なシナリオas
を用いたボクシングとアンボクシングボクシングとは、値型インスタンスをオブジェクト参照に変換するプロセスです。 これは、すべての値型が暗黙的にobject
から継承するため可能です。 値型をボックス化する際、object
内にラップします。
ボクシング変換のための以下のコードを検討してください:
int intValue = 42;
object boxedValue = intValue;
int intValue = 42;
object boxedValue = intValue;
Dim intValue As Integer = 42
Dim boxedValue As Object = intValue
ここでは、intValue
がobject
にボックス化されます。
ボクシングとは逆のプロセスであるアンボクシングは、object
から値型を抽出することです。 as
演算子は、特に object
が期待する値の型を保持しているかどうか確信がないときに、安全に値をボックス化解除するために使用できます。 ボックス解除が失敗した場合、結果の式は null になります。
次の例を考慮してください:ボックス化解除の変換
object obj = 42;
int? result = obj as int?;
object obj = 42;
int? result = obj as int?;
Dim obj As Object = 42
Dim result? As Integer = CType(obj, Integer?)
配列はC#の参照型です。 時には、object
が特定のタイプの配列であるかどうかを判別し、それを操作する必要があるかもしれません。 as
演算子もここで役立ちます。
次のコードを考慮してください:
object[] arrayObject = new string[] { "one", "two", "three" };
string[] stringArray = arrayObject as string[];
object[] arrayObject = new string[] { "one", "two", "three" };
string[] stringArray = arrayObject as string[];
Dim arrayObject() As Object = New String() { "one", "two", "three" }
Dim stringArray() As String = TryCast(arrayObject, String())
上記のコードでは、arrayObject
はオブジェクトの配列ですが、実際には文字列を保持しています。 as
演算子を使用すると、それを文字列の配列として安全に試すことができます。
as
言語統合クエリ (LINQ - Microsoft Documentation) は、C#の強力な機能であり、SQLのような方法でコレクションをクエリすることができます。 時々、コレクション内で混合タイプのオブジェクトを取得し、特定のタイプをフィルタリングしたいことがあります。この場合、as
演算子が非常に便利です。
例えば、文字列と整数の両方を含むオブジェクトのリストを考えてみましょう。 文字列のみを取得したい場合は、LINQと組み合わせてas
演算子を使用できます。
var mixedList = new List<object> { "Hello", 42, "World", 100 };
var stringValues = mixedList
.Select(item => item as string)
.Where(item => item != null)
.ToList();
var mixedList = new List<object> { "Hello", 42, "World", 100 };
var stringValues = mixedList
.Select(item => item as string)
.Where(item => item != null)
.ToList();
Dim mixedList = New List(Of Object) From {"Hello", 42, "World", 100}
Dim stringValues = mixedList.Select(Function(item) TryCast(item, String)).Where(Function(item) item IsNot Nothing).ToList()
C#開発者向けIron Suiteソリューションは、C#開発者がPDF操作、Excel処理、Optical Character Recognition (OCR)、およびバーコード生成と読み取りなどの機能をシームレスに統合することを可能にする高品質なツールのスイートです。 これらのツールは、as
およびis
演算子に関する以前の議論と同様に、堅牢なアプリケーションを構築する際の開発者の効率を高めるために非常に重要です。
IronPDFはC#アプリケーション内でPDFファイルの生成、操作、読み込みを可能にします。 私たちのトピックに関連して、データを保持する参照型があり、そのデータをレポートやドキュメントに変換したいと考えているとします。 IronPDF
は、アプリケーションの出力を型変換に似た方法で、適切にフォーマットされたPDFドキュメントに変換することができます。
多くのソフトウェアアプリケーションにおいて、Excelファイルを扱うことは頻繁に求められる要件です。 IronXL for Excel Operations
は、開発者にOffice Interopに依存することなく、Excelスプレッドシートを読み取り、編集し、作成する機能を提供します。型変換の議論において、IronXL
をC#のデータ構造やデータベースのエントリをExcel形式にシームレスに変換するツールと考えてください。
IronOCRによる光学文字認識
は、開発者が画像からテキストを読み取り解釈することを可能にする光学文字認識ツールです。 これを私たちのチュートリアルに橋渡しすると、高度な認識機能を使用してobject
(この場合は画像)をより具体的な型(string
またはテキストデータ)に変換することに似ています。
多くの商用アプリケーションでは、バーコードの取り扱いが不可欠です。 バーコード処理用IronBarcodeツール
は、開発者がC#アプリケーションでバーコードの生成、読み取り、およびデコードを行う補助をします。 私たちの型変換に関する議論に関連して、IronBarcode
は視覚的なバーコードデータ(object
の一種)を文字列や商品詳細などのより具体的で使用可能なデータ型に変換するツールと見なすことができます。
Iron Suiteの提供製品は、それぞれが型変換と型チェックに関連するC#の柔軟性と強力さを証明しています。 これらのツールは、as
や is
演算子のように、開発者にデータを効率的に変換し処理する能力を提供します。
これらのツールをプロジェクトに統合することを検討している場合、各製品ライセンスは$749から始まることを知っておく価値があります。また、すべての製品がIron Suite Toolsの無料トライアルを提供しています。 総合的なソリューションをお求めの方には、Iron Suite
が魅力的なオファーを提供します:Iron Suiteライセンスをわずか2製品の価格で取得できます。