在 C# 中,类型转换是将一种数据类型的值转换为另一种数据类型的过程。C# 提供了两种主要类型转换:隐式转换(Implicit Conversion)和显式转换(Explicit Conversion)。

1. 隐式转换(Implicit Conversion):

隐式转换是指从较小的数据类型向较大的数据类型进行转换,系统会自动完成,无需显式说明。例如,将 int 类型转换为 long 类型:
int intValue = 42;
long longValue = intValue; // 隐式转换

在这个例子中,int 类型的值被隐式转换为 long 类型。

2. 显式转换(Explicit Conversion):

显式转换是在代码中明确指定要进行的转换,通常使用强制类型转换运算符。例如,将 double 类型转换为 int 类型:
double doubleValue = 3.14;
int intValue = (int)doubleValue; // 显式转换

在这个例子中,使用了 (int) 强制类型转换运算符将 double 类型的值转换为 int 类型。

3. 类型转换方法:

C# 还提供了一些内置的类型转换方法,如 Convert.ToXxx 方法,用于将一种类型转换为另一种类型。例如,将字符串转换为整数:
string numericString = "123";
int number = Convert.ToInt32(numericString);

请注意,在进行类型转换时可能会发生溢出或精度丢失。因此,在进行类型转换之前,最好进行适当的验证或使用安全的转换方法,如 int.TryParse。

4. 转换操作符:

C# 还允许用户自定义转换操作符,这是用户定义类型的一部分,允许对象在不同类型之间进行转换。这包括隐式和显式转换操作符。
class Temperature
{
    public double Celsius { get; set; }

    // 用户定义的隐式转换操作符
    public static implicit operator Fahrenheit(Temperature t)
    {
        return new Fahrenheit { Value = t.Celsius * 9 / 5 + 32 };
    }
}

class Fahrenheit
{
    public double Value { get; set; }

    // 用户定义的显式转换操作符
    public static explicit operator Celsius(Fahrenheit f)
    {
        return new Celsius { Value = (f.Value - 32) * 5 / 9 };
    }
}

class Celsius
{
    public double Value { get; set; }
}

// 使用隐式转换
Temperature temperature = new Temperature { Celsius = 25 };
Fahrenheit fahrenheit = temperature; // 隐式转换

// 使用显式转换
Celsius celsius = (Celsius)fahrenheit; // 显式转换

在上述例子中,Temperature 类和 Fahrenheit 类之间定义了隐式转换操作符,而 Fahrenheit 类和 Celsius 类之间定义了显式转换操作符。

总的来说,在进行类型转换时,要确保目标类型能够容纳源类型的值,以避免数据丢失或溢出的问题。


转载请注明出处:http://www.pingtaimeng.com/article/detail/14745/C#