第五章 变量的更多内容
本章内容:
- 如何在类型之间进行隐式和显式转换
- 如何创建和使用枚举类型
- 如何创建和使用结构类型
- 如何创建和使用数组
- 如何处理字符串值
5.1 类型转换
5.1.1 隐式转换
隐式转换不需要做任何工作,也不需要另外编写代码。
可以隐式执行的数值转换:
类型 | 可以安全转换为 |
byte | short,ushort,int,uint,long,ulong,float,double,decimal |
sbyte | short,int,long,float,double,decimal |
short | int,long,float,double,decimal |
ushort | int,uint,long,ulong,float,double,decimal |
int | long,float,double,decimal |
uint | long,ulong,float,double,decimal |
long | float,double,decimal |
ulong | float,double,decimal |
float | double |
char | ushort,int,uint,long,ulong,float,double,decimal |
5.1.2 显式转换
checked和unchecked,表达式的溢出表达上下文。
也可以修改项目属性来实现:
在VS中右击“解决方案资源管理器”,选择“属性”,单击窗口左边的生成。
单击“高级(Advanced)”按钮,在打开的对话框中,选中“检查运算上溢/下溢(Check for Arithmetic Overflow/Underflow)”。
5.1.3 使用Convert命令进行显示转换
命令 | 结果 |
Convert.ToBoolean(var) | var转换为bool |
Convert.ToByte(var) | var转换为byte |
Convert.ToChar(var) | var转换为var |
Convert.ToDecimal(var) | var转换为decimal |
Convert.ToDouble(var) | var转换为double |
Convert.ToInt16(var) | var转换为short |
Convert.ToInt32(var) | var转换为int |
Convert.ToInt64(var) | var转换为long |
Convert.ToSByte(var) | var转换为sbyte |
Convert.ToSingle(var) | var转换为float |
Convert.ToString(var) | var转换为string |
Convert.ToUInt16(var) | var转换为ushort |
Convert.ToUInt32(var) | var转换为uint |
Convert.ToUInt64(var) | var转换为ulong |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
short shortResult, shortVal = 4;
int integerVal = 67;
long longResult;
float floatVal = 10.5F;
double doubleResullt, doubleVal = 99.999;
string stringResult, stringVal = "17";
bool boolVal = true;
Console.WriteLine("Variable Conversion Example.\n");
doubleResullt = floatVal * shortVal;
Console.WriteLine("Implicit,->double:{0}*{1}->{2}",floatVal,shortVal,doubleResullt);
shortResult = (short)floatVal;
Console.WriteLine("Explicit,->short:{0}->{1}",floatVal,shortResult);
stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVal);
Console.WriteLine("Explicit,->string:\"{0}\"+\"{1}\"->{2}",boolVal,doubleVal,stringResult);
longResult = integerVal + Convert.ToInt64(stringVal);
Console.WriteLine("Mixed,->long:{0}+{1}->{2}",integerVal,stringVal,longResult);
Console.ReadKey();
}
}
}
5.2 复杂的变量类型
5.2.1 枚举
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
class Program
{
static void Main(string[] args)
{
orientation myDirection = orientation.north;
Console.WriteLine("my direction={0}",myDirection);
Console.ReadKey();
}
}
}
注:Enum.Parse(),将string转换为枚举值。typeof,得到操作数的类型。
5.2.2 结构
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
struct route
{
public orientation direction;
public double distance;
}
class Program
{
static void Main(string[] args)
{
route myRoute;
int myDirection = -1;
double myDistance;
Console.WriteLine("1) North\n2) South\n3) East\n4) West");
do
{
Console.WriteLine("Select a direction:");
myDirection=Convert.ToInt32(Console.ReadLine());
} while ((myDirection < 1) || (myDirection > 4));
Console.WriteLine("Input a distance:");
myDistance = Convert.ToDouble(Console.ReadLine());
myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;
Console.WriteLine("myRoute specifies a direction of {0} and a "+" diatance of {1}",myRoute.direction,myRoute.distance);
Console.ReadKey();
}
}
}
5.2.3 数组
foreach循环
5.3 字符串的处理
string类型变量可以看作是char变量的只读数组。
.ToCharArray()转化为数组
.ToLower()转化为小写
.ToUpper()转化为大写
.ToTrim()删除输入字符串中的空格
.TrimStrart()删除字符串前面的空格
.TrimEnd()删除字符串后面的空格
.PadLeft()在字符串的左边添加空格,使字符串达到指定的长度
.PadRight()在字符串的右边添加空格使字符串达到指定的长度
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
string myString = "This is a test.";
char[] seperator = { ' '};
string[] myWords;
myWords = myString.Split(seperator);
foreach (string word in myWords)
{
Console.WriteLine("{0}",word);
}
Console.ReadKey();
}
}
}
.Split()将string转换为string数组,把它在指定的位置分隔开。
输入字符串,按相反顺序输出:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please enter a string:");
string myString = Console.ReadLine();
char[] seperate=myString.ToCharArray();
Array.Reverse(seperate);
for (int i = 0; i < myString.Length; i++)
{
Console.Write("{0}", seperate[i]);
}
Console.ReadKey();
}
}
}
编写一个控制台应用程序,它接收一个字符串,用yes替换字符串中所有的no:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please enter a string:");
string myString = Console.ReadLine();
Console.WriteLine("{0}", myString.Replace("no", "yes"));
Console.ReadKey();
}
}
}