在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在 C# 中編程通常涉及處理不同類型的數據。 有時,我們需要檢查一個 object
是否為某種型別,或嘗試將其轉換為該型別。 這就是as
運算子關鍵字派上用場。 與其近親 is 運算符
一樣,幫助進行類型測試和轉換。 在本教程中,我們將探討此運算子的複雜性及其使用情境。
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 值
。
雖然 as-operator 和顯式轉型具有類似的用途,但存在一個關鍵區別。 如果顯式轉型失敗,將拋出異常。 另一方面,如果 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
運算子的需求。
as
運算符在空值類型上特別有用。數值類型(如 int
、double
等。)不能被賦予 null 值
。 但是,通過將它們設置為可空,您可以為它們賦予 null 值。 as
運算子可以用於嘗試轉換為可空值類型:
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
運算符無法用於值類型。(除非處理可空值類型)或者使用涉及明確方法的用戶自定義轉換。
裝箱是將值類型實例轉換為對象引用的過程。 這得以實現是因為每個值類型都隱式地繼承自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 結合使用語言整合查詢(LINQ - Microsoft 文檔)是 C# 中一個強大的功能,允許您以類似 SQL 的方式查詢集合。 有時候,在集合中可能會取得混合類型的物件,並希望過濾出特定類型。在這裡,as
運算符會非常有用。
例如,考慮一個包含字串和整數的物件清單。 如果您想僅檢索字串,可以將 as
運算子與 LINQ 結合使用:
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()
Iron Suite 解決方案適用於 C# 開發人員是一套高品質工具,能夠使C#開發人員無縫整合如PDF操作、Excel處理、光學字符識別等功能。(光學字符識別),條碼生成和讀取。 這些工具,就像我們之前討論的 as
和 is
運算符一樣,在提高開發人員構建強大應用程式的效率方面具有關鍵作用。
IronPDF 允許開發者在其 C# 應用程式中生成、操作和讀取 PDF 文件。 考慮到我們主題的相關性,假設您有一個參考類型持有一些資料,並且您想將這些資料轉換成報告或文件。 IronPDF
可以將您的應用程式輸出,類似於類型轉換,轉換成格式良好的 PDF 文件。
在許多軟體應用中,處理 Excel 文件是一項常見的需求。 IronXL 用於 Excel 操作
為開發人員提供讀取、編輯和創建Excel電子表格的能力,而無需依賴Office Interop。在我們關於類型轉換的討論中,可以將IronXL
視為一個可以讓您將C#中的數據結構或數據庫條目無縫轉換為Excel格式的工具。
使用 IronOCR 的光學字符識別
是一款光學字符識別工具,允許開發者從圖像中讀取和解釋文字。 將此內容與我們的教程聯系起來,就像將一個 object
進行轉換。(在這種情況下,一張圖片)到更具体的类型(string
或文本數據)使用先進的識別能力。
在許多商業應用中,處理條碼是不可或缺的。 IronBarcode 條形碼處理工具
協助開發人員在 C# 應用程式中生成、讀取和解碼條碼。 關於我們關於類型轉換的討論,IronBarcode
可以被視為一個將視覺條碼數據轉換的工具。(object
的一種形式)轉換為更具體、可用的數據類型,例如字串或產品詳細資料。
每個產品中的Iron Suite 產品提供是 C# 所提供的靈活性和強大功能的明證,特別是在我們討論類型轉換和類型檢查時。 這些工具,如 as
和 is
運算符,為開發人員提供了高效轉換和處理數據的能力。
如果您正在考慮將任何這些工具整合到您的專案中,值得注意的是,每個產品授權均從$749開始,並且每個產品都提供一個Iron Suite Tools 的免費試用. 對於尋找全面解決方案的人而言,Iron Suite
提供了引人注目的方案:您可以獲取 Iron Suite 授權僅需兩款產品的價格。