2.1 变量与数据类型
变量基础
变量是程序中最基本的存储单元,用于保存程序运行期间可能变化的数据。在C#中,变量需要先声明后使用,声明语法为:
数据类型 变量名 [= 初始值];
示例:
int age = 25;
string name = "张三";
bool isActive = true;
C#数据类型
C#数据类型分为值类型和引用类型两大类:
值类型(Value Types)
整数类型:
byte(0-255)short(-32,768 to 32,767)int(-2.1B to 2.1B)long(极大整数)
浮点类型:
float(7位精度)double(15-16位精度)decimal(28-29位精度,适合财务计算)
其他值类型:
bool(true/false)char(单个Unicode字符)struct(自定义值类型)
引用类型(Reference Types)
string:不可变的字符序列object:所有类型的基类class:自定义引用类型interface:接口类型array:数组类型
类型转换
C#支持两种类型转换方式:
隐式转换(自动)
int num = 10;
long bigNum = num; // 自动转换
显式转换(强制)
double pi = 3.14;
int intPi = (int)pi; // 结果为3
方法转换
string numberStr = "123";
int number = int.Parse(numberStr);
// 或使用TryParse避免异常
int.TryParse(numberStr, out number);
特殊数据类型
var关键字(类型推断)
var message = "Hello World"; // 编译器推断为string
var count = 10; // 推断为int
dynamic类型
dynamic dynamicVar = 10;
dynamicVar = "Now I'm a string"; // 运行时确定类型
可空类型(Nullable)
int? nullableInt = null; // 值类型可赋值为null
if(nullableInt.HasValue)
{
Console.WriteLine(nullableInt.Value);
}
最佳实践
- 优先使用
int而非short/long,除非有明确需求 - 财务计算必须使用
decimal - 字符串操作使用
StringBuilder提高性能 - 使用
var简化代码,但不要滥用(应保持代码可读性) - 避免不必要的类型转换,特别是装箱/拆箱操作
示例代码
using System;
class DataTypesDemo
{
static void Main()
{
// 基本类型示例
int studentCount = 30;
double averageScore = 85.5;
char grade = 'A';
bool isPassed = true;
// 类型转换
string input = "1234";
int converted = int.Parse(input);
// 可空类型
int? nullableValue = null;
nullableValue = converted;
// 输出
Console.WriteLine($"平均分:{averageScore:F1}");
Console.WriteLine($"转换值:{converted}");
Console.WriteLine($"可空类型:{nullableValue ?? 0}");
}
}
常见问题
Q:什么时候用float/double/decimal?
- 科学计算:double
- 金融计算:decimal
- 图形处理:float
Q:string是值类型还是引用类型?
- string是特殊的引用类型,具有值类型的语义(不可变性)
Q:var会影响性能吗?
- 不会,var只是编译时类型推断,生成的IL代码与显式声明相同
