3 本我 4周前 86次点击
前面示例中使用的显式类型转换,与前面其他的示例有一些区别。前面使用ToDouble()等命令把字符串值转换为数值,显然,这种方式并不适用于所有字符串。
例如,如果使用ToDouble()把Number字符串转换为double值,在执行代码时会报错。
可以看出,执行失败。为成功执行此类转换,所提供的字符串必须是数值的有效表达方式,该数还必须是不会溢出的数。数值的有效表达方式是:首先是一个可选符号(加号或减号),然后是0位或多位数字,一个可选的句点后跟一位或多位数字,接着是一个可选的e或E,后跟一个可选符号和一位或多位数字,除了还可能有空格(在这个序列之前或之后),不能有其他字符。利用这些可选的额外数据,可将-1.2451e-24这样复杂的字符串识别为数值。
对于这些转换要注意的一个问题是,它们总是要进行溢出检查,checked和unchecked关键字以及项目属性设置不起作用。
下面的示例包括前面发帖列出的许多转换类型。它声明和初始化许多不同类型的变量,再在它们之间进行隐式和显式转换。
static void Main(string[] args)
{
//声明变量
short shortResult, shortVal = 4;
int intVal = 67;
long longResult;
float floatVal = 10.5f;
double doubleResult, doubleVal = 99.999;
string stringResult, stringVal = "17";
bool boolVal = true;
//变量转换
WriteLine("变量转换示例\n");
doubleResult = floatVal * shortVal;
WriteLine($"隐式转换->double:{floatVal}*{shortVal}->{doubleResult}");
shortResult = (short)floatVal;
WriteLine($"显示转换->short:{floatVal}->{shortResult}");
stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVal);
WriteLine($"显示转换->string:\"{boolVal}\"+\"{doubleVal}\"->"+$"{stringResult}");
longResult = intVal + Convert.ToInt64(stringVal);
WriteLine($"混合->long:{intVal}+{stringVal}->{longResult}");
//按下任意键结束
ReadKey();
}
这个示例包含前面介绍的所有转换类型,既有像前面简短代码示例中的简单赋值,也有在表达式中进行的转换。必须考虑这两种情况,因为每个非一元运算符的处理都可能要进行类型转换,而不仅是赋值运算符。例如:
shortVal * floatVal
其中把一个short值与一个float值相乘。在这样的指令中,没有指定显式转换,所以如有可能,就会进行隐式转换。在这个示例中,唯一有意义的隐式转换是把short值转换为float值(因为把float值转换为short值需要进行显式转换),所以这里将使用隐式转换。
shortVal * (short)floatVal
有趣的是,两个short值相乘的结果并不会返回一个short值。因为这个操作的结果很可能大于32767(这是short类型可以存储的最大值),所以这个操作的结果实际上是int值。
这个转换过程初看起来比较复杂,但只要按照运算符的优先级把表达式分解为不同的部分,就可以弄明白这个过程。
好了成功啥也没看懂