基本数值类型
整数类型: sbyte byte(8)/ short ushort(16) / int uint(32)/ long ulong(64) [u\l\lu\ul]
浮点类型:float(32)[f] doubel(64)
decimal(128)[m/M]
*decimal 与c#的浮点类型的区别
decimal 基数为十进制的浮点类型,而c#的浮点类型是基数为二进制的。decimal 是精确的,c#的浮点类型是不精确的。
字面值(literal value)
直接将一个值放到源代码中的行为称为硬编码(hardcoding)
十六进制记数法 (每位十六进制的数字是4bit,以0x开头。)
0x000A 表示 10
0x002A 表示 42
**如果向显示一个数的十六进制形式
//display "0x2A"
System.Console.WriteLine("0x{0:X}",42);//X的大小写决定了十六进制字母的大小写形式
Boolean bool类型(8)
true false
string option = "HeLp";
// 比较两个指定的 System.String 对象(其中忽略或考虑其大小写),并返回一个整数,指示二者在排序顺序中的相对位置。
int comparison = string.Compare(option,"/help",true);
Console.WriteLine(comparison);
char 类型 其取值范围对应于Unicode字符集
包括转义字符
\0 null
\b 退格
\f 换页
\r 回车
*处理转义字符
1、使用@"……"
2、使用转换符号\
Console.Write(@"begin
/\
/ \
/__\
end" );
原样输出三角和bejin, end
**round-trip 格式化
为了更准确的判断与一个double值对应的字符串形式,,我们可以使用一个格式字符串和一个round-trip格式说明符R(或者r)进行转换。round-trip格式说明符返回的是一个字符串,假如将该字符串转换回数值, 那么能获得原始值。
const double number = 1.618033988749895;
double result;
string text;
text = string.Format("{0}",number);
result = double.Parse(text);
System.Console.WriteLine("{0}:number !=result",number !=result);
Console.WriteLine(result);//显示为1.61803398874989
text = string.Format("{0:R}", number);
result = double.Parse(text);
System.Console.WriteLine("{0}:number ==result", number == result);
Console.WriteLine(result);//显示为1.61803398874989
string的静态方法
string.Fromat();
string.Concat();
string.Compare();
string的实例方法
以变量名作为前缀。
string name;
name.EndsWith("Ph.D");
name.StartsWith("Dr.");
name.ToUpper("");
name.ToLower("");
name.Trim();
name.TrimEnd();
name.TrimStart();
name.Repalce(old,new);
* 换行符
System.Console.WriteLine("hello world")等价于 System.Console.Write("hello world"+System.Environment.NewLine);
**C#属性
Length是string的一个属性。c#允许像访问一个成员变量(字段)那样访问属性,并有赋值方法(setter)和取值方法(getter)
***String
字符串长度 stringName.Lenth。
字符串是不可变的(immutable)。text1=text.ToUpper();//text.ToUpper()产生一个新的字符串,赋值给text1。text本生没有变化。
***System.Text.StringBuilder
一些Append()AppendFormat() Insert() Remove() Replace()这样的方法是修改变量中的数据,而不是像string那样生成新的字符串。
***null和void
null是相对于引用类型、指针类型、可空类型。
//和只声明变量不同,将null赋给一个引用类型是指变量已被设置,而未进行赋值的变量未被设置,所以在赋值前使用变量,通常会造成编译错误。
string name;
name=null;
void 用于指示方法没有返回值。
**隐式类型的局部变量 var(implicitly typed local variable)
不是显示的指定数据的类型,而是用var(C# 3.0)这个上下文关键字来声明一个隐式类型的局部变量。
var text = Console.ReadLine();
var uppercase = text.ToUpper();
var的目的是支持匿名类型(anonymous type),匿名类型是在方法内部动态声明的数据类型,而不是通过显示的类定义来声明的。
一下的方法是连接(joining或者associating)数据类型的关键,能将特定的类型缩减为更少的数据元素,从而有效的减小类型的大小。
var patent1=
new { Title ="Bifocals",YearOfPublication="1784"};
var patent2 =
new { Title = "Phonograph", YearOfPublication = "1877" };
Console.WriteLine("{0},{1}", patent1.Title, patent1.YearOfPublication);
Console.WriteLine("{0},{1}", patent2.Title, patent2.YearOfPublication);
**值类型和引用类型
栈 -->值
堆 -->引用
**可控修饰符 ?
为了声明可以存储null的变量,要使用可空修饰符?。在数据库编程尤其有用,在数据表中经常有值类型的列允许为空的时候。
int? count =null;
do
{
……
}
while(count==null);
**数据类型之间的转换
转型(casting)
显示转型(explicit cast):有可能造成丢失数量级或者引发异常的转换都需要显示转型。
隐式转型(implicit cast):不会引发异常的任何转换。
long longNum = 19216815154;
int intNum = (int ) longNum;//intNum的值是错误的,没有处理。
checked和unchecked
//会出现OverflowException。如果不用checked语句块,输出为负值。
checked
{
int numMax = int.MaxValue;
numMax = numMax + 1;
Console.WriteLine(numMax);
Console.ReadKey();
}
//c# 提供了一个命令行选项将默认行为从unchecked改成checked,此外,c#还支持unchecked块,会将数据截断,而不是为块中的赋值引发异常。
unchecked
{
int numMax = int.MaxValue;
numMax = numMax + 1;
Console.WriteLine(numMax);
Console.ReadKey();
}
隐式转型
int intNum=31416;
long longNum=intNum;//也可进行显示转换。
不进行转型的类型转换
int.parse();
System.Convert.ToDouble(); //conver转换从基本类型到基本类型。
System.Convert.ToBoolean();
.Tostring();
TryParse()
基本数据类型都包含一个静态的方法TryParse() 。该方法与Parse()方法相似,只是返回值在转换失败的时候返回false。
**数组
int[] ;
int [,];
string[]=new []{ ……}
string [] languages=new string[9];//声明分配数组但不指定初始值。类型相对应的默认值如下:
引用类型 null
数值类型 0
bool false
char '\0'
多为数组中的每一维的大小都必须具有一致的大小。另外一种交错数组(jagged array)
int [][] cells={
new int[]{1,0,2,0},
new int[]{1,2,0},
new int[]{1}
};
数组长度
cells.length
数组的方法
System.Arrary.Sort(arraryName);
index=System.BinarySearch(arraryName,searchString);//在使用BinarySearch()的时候有必要对数组先排序。
System.Array.Reverse(arraryName);
System.Array.Clear(arrayNme,0,arrayName.Length);//Clear()方法将数组中每个元素都设置为其默认值(false ,0 , null)
数组的实例方法
GetLength()//获取特定维的大小;
Rank();
Clone();//创建一个全新的副本
string reverse, palindrome;
Console.Write("enter a palindrome");
palindrome = Console.ReadLine();reverse = palindrome.Replace(" ","");
reverse = reverse.ToLower();char[] temp = reverse.ToCharArray();
System.Array.Reverse(temp);
if (reverse == new string(temp))
{
System.Console.WriteLine("\"{0}\"is a palindrome.", palindrome);
}
else
{
System.Console.WriteLine("\"{0}\"is not a palindrome.", palindrome);
}