|
C#中(Convert.ChangeType处理Nullable<>和非Nullable<>)的说明
在 C# 中,`Convert.ChangeType` 方法用于将一个对象转换为指定的类型。对于可空类型(`Nullable<T>`)和非可空类型(`T`),`Convert.ChangeType` 的处理方式有所不同。以下是对这两种情况的详细说明。
### 1. 非可空类型的转换
对于非可空类型,例如 `int`、`double`、`DateTime` 等,`Convert.ChangeType` 会尝试将输入对象转换为目标类型。如果转换成功,则返回转换后的值;如果输入对象为 `null`,则会抛出 `InvalidCastException`。
#### 示例:
- ```csharp
- object value = "123";
- int result = (int)Convert.ChangeType(value, typeof(int)); // result = 123
- object nullValue = null;
- // int nullResult = (int)Convert.ChangeType(nullValue, typeof(int)); // 会抛出 InvalidCastException
- ```
复制代码
### 2. 可空类型的转换
对于可空类型(`Nullable<T>`),`Convert.ChangeType` 会在处理时考虑到 `null` 值。如果输入对象为 `null`,则返回一个 `null` 值的可空类型;如果输入对象可以成功转换为非可空类型,则返回转换后的值。
#### 示例:
- ```csharp
- object nullableValue = "456";
- int? nullableResult = (int?)Convert.ChangeType(nullableValue, typeof(int?)); // nullableResult = 456
- object nullValue = null;
- int? nullResult = (int?)Convert.ChangeType(nullValue, typeof(int?)); // nullResult = null
- ```
复制代码
### 3. 总结
- **非可空类型**:如果输入对象为 `null`,`Convert.ChangeType` 会抛出 `InvalidCastException`。
- **可空类型**:如果输入对象为 `null`,`Convert.ChangeType` 会返回 `null`,否则返回转换后的可空类型值。
### 4. 注意事项
- 使用 `Convert.ChangeType` 时,确保输入对象的类型可以转换为目标类型,否则会抛出 `InvalidCastException` 或 `FormatException`。
- 对于自定义类型,确保实现了必要的转换逻辑,以便 `Convert.ChangeType` 可以正确处理。
通过理解这些细节,可以更有效地在 C# 中使用 `Convert.ChangeType` 进行类型转换,避免常见的错误。
|
|