在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
C# 编程经常涉及不同类型的数据。 有时,我们需要检查 "对象 "是否属于某种类型,或尝试将其转换为该类型。 那就是 as "操作符关键字派上用场。 与 "is "操作符近似的 "is "操作符有助于类型测试和转换。 在本教程中,我们将探讨该操作符的复杂性及其使用案例。
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
将保留字符串值。 否则,译文将为 "空值"。
虽然作为操作员和明确的投递都有类似的目的,但有一个关键的区别。 如果显式转换失败,则会抛出异常。 另一方面,如果 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
等。)不能分配 "空值"。 不过,通过使其可空化,您可以将空值赋给它们。 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 "操作符不能用于值类型(除非处理可归零值类型)或涉及显式方法的用户自定义转换。
装箱是将值类型实例转换为对象引用的过程。 之所以能够做到这一点,是因为每种值类型都隐式地继承自 "对象"。 当您框选一个值类型时,您会将其封装在一个 "对象 "中。
请考虑以下代码的拳击转换:
int intValue = 42;
object boxedValue = intValue;
int intValue = 42;
object boxedValue = intValue;
Dim intValue As Integer = 42
Dim boxedValue As Object = intValue
在这里,"intValue "被框入一个 "object "中。
开箱是开箱的反向过程,即从 "对象 "中提取值类型。 as "运算符可用于安全地解框值,尤其是当您不确定 "对象 "是否持有您期望的值类型时。 如果开箱不成功,表达结果将为空。
请参考以下开箱转换示例:
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# 中的引用类型。 有时,您可能需要确定 "对象 "是否是一种特定类型的数组,然后对其进行处理。 在这方面,"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 - 微软文档)是 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()
面向 C# 开发人员的 Iron Suite 解决方案是一套高质量的工具,使 C# 开发人员能够无缝集成 PDF 操作、Excel 处理、光学字符识别等功能。(光学字符识别)此外,译文还包括:.NET、Java、Python 或 Node js 的术语、条形码的生成和读取。 这些工具,就像我们之前讨论的 "as "和 "is "操作符一样,在提高开发人员构建强大应用程序的效率方面起着关键作用。
IronPdf 允许开发人员在其 C# 应用程序中生成、处理和读取 PDF 文件。 考虑到与我们主题的相关性,假设您有一个包含某些数据的参考类型,您想将这些数据转换为报告或文档。 IronPDF 可以接收您应用程序的输出,并以类似于类型转换的方式将其翻译成格式良好的 PDF 文档。
处理 Excel 文件是许多软件应用程序中的常见要求。 用于 Excel 操作的 IronXL.Excel为开发人员提供了读取、编辑和创建 Excel 电子表格的能力,而无需依赖 Office Interop。在我们讨论类型转换的背景下,可以将 "IronXL "视为一种工具,它允许您将 C# 中的数据结构或数据库条目无缝转换为 Excel 格式。
使用 IronOCR 进行光学字符识别是一种光学字符识别工具,允许开发人员从图像中读取和解释文本。 将其与我们的教程衔接起来,就类似于转换一个 `object(在这种情况下,图像)更具体的类型(字符串或文本数据)使用先进的识别功能。
在许多商业应用中,处理 BarCode 是不可或缺的。 用于条码处理的 IronBarcode 工具BarCode 帮助开发人员在 C# 应用程序中生成、读取和解码条形码。 与我们关于类型转换的讨论相关,"IronBarcode "可被视为一种翻译可视化条形码数据的工具(物体)转化为更具体、更可用的数据类型,如字符串或产品详细信息。
译文中的每个产品Iron Suite 产品这证明了 C# 所提供的灵活性和强大功能,尤其是在我们讨论类型转换和类型检查时。 这些工具,如 as
和 is
操作符,为开发人员提供了高效转换和处理数据的能力。
如果您正在考虑将这些工具集成到您的项目中,值得注意的是,每个产品的许可证都是从 $749 开始,每个产品都提供一个免费试用 Iron Suite 工具. 对于那些正在寻找综合解决方案的人,"Iron Suite "提供了诱人的优惠:您可以获取 Iron Suite 许可证只需两件产品的价格。