c#语言学习 专题二 String

本文详细解析了C#中的string与.NET Framework的String的区别,包括使用场景、性能影响、方法调用等方面,并通过示例代码展示了它们在实际应用中的差异与注意事项。同时介绍了string与String的比较方法、StringBuilder的使用场景以及string常用方法的概述。

前记

    msdn上前几个部分我就不说了吧!就从string开始说起!一个程序员的职业生涯很多时候都是在跟这个东西打交道!

内容

    一,string和String

    MSDN中对string的说明:

    string is an alias for String in the .NET Framework。string是String的别名而已,string是c#中的类,String是Framework的类,C# string 映射为 Framework的 String。如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作。

    如果使用C#,建议使用string,比较符合规范 。 string始终代表 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的时候并且当前命名空间中没有名为String的类型(class、struct、delegate、enum)的时候才代表System.String。

    string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色)

    c# string映射为.net Framework的String

    如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作

    如果使用c#,建议使用string,比较符合规范

    string始终代表 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的时候并且当前命名空间中没有名为String的类型(class、struct、delegate、enum)的时候才代表System.String

    string是关键字,String不是,也就是说string不能作为类、结构、枚举、字段、变量、方法、属性的名称,而String可以。

    以上摘自:http://www.cnblogs.com/albertly/archive/2008/11/18/1335823.html

    二,String.empty,null,""比较

    首先,要先对一个容易出错的地方提前做出说明。string.equals(string str),和”==“。==是指指针级别的,当数据类型为为原子类型时,可以用==比较是否相等,但是,非原子类型,如string时,==比较的的是对象的唯一标识。普通的对象使用==时,比较的是对象的唯一标识,即(object==object2)即使内容相同,结果也为false;但是,string的==已经被重载。

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

 

    namespace ConsoleTest

    {

        class Program

        {

            static string emstr = "wxw";

 

            static void Main(string[] args)

            {

            string str = "";

            string strempty = string.Empty;

            string strnull = null;

            if (str.Equals(strempty))

            {

                System.Console.WriteLine("\"\" equals empty!");

            }else

            {

                System.Console.WriteLine("\"\" not equals empty!");

            }

            //运行结果为:"" equals empty

            if (str.Equals(strnull))

            {

                System.Console.WriteLine("\"\" equals null!");

            }

            else

            {

                System.Console.WriteLine("\"\" not equals null!");

            }

            //运行结果:"" not equals null!

            //strnull.Equals(strempty);

 

            if (strempty.Equals(strnull))

            {

                System.Console.WriteLine("empty equals null!");

            }

            else

            {

                System.Console.WriteLine("empty equals null!");

            }

            //运行结果:empty equals null!

            if(strempty==strnull)

            {

                System.Console.WriteLine("empty equals null!");

            }

            else

            {

                System.Console.WriteLine("empty equals null!");

            }

 

            //运行结果:empty equals null

            if (strnull == strempty)

            {

                System.Console.WriteLine("empty equals null!");

            }

            else

            {

                System.Console.WriteLine("empty  not equals null!");

            }

            //运行结果:empty  not equals null!

            //原因是由于,第一个参数是null类型对象,按照普通对象进行比较!

 

            if ("viwii" == "viwii")

            {

                System.Console.WriteLine("equal!");

            }

            else

            {

                System.Console.WriteLine("not equal!");

            }

            //运行结果:equal

            string strequal = "wxw";

            string strequal1 = "wxw";

            if (emstr == strequal1)

            {

                System.Console.WriteLine("equal!");

            }

            else

            {

                System.Console.WriteLine("not equal!");

            }

            //运行结果:equal!

            System.Console.ReadKey();

            }

        }

    }

    注意,一个可能为null的字符串不可以使用equals方法,会报出异常:未将对象引用设置到对象实例!

    三,String和StringBuilder

        当做字符串连接时,可直接采用String+方法,但是当需要做大量字符串连接时,建议使用StringBuilder,从内存利用,效率等各个方面来见,StringBuilder都能高出多个数量级

    ,string常用方法

    详细的使用信息可以收索String!这里仅对个别方法进行说明。

     1> string.format  (以下偷懒了,摘自别人的博客,但忘记了出处,遗憾!)

C#格式化数值结果表

字符

说明

示例

输出

C货币string.Format("{0:C3}", 2)$2.000
D十进制string.Format("{0:D3}", 2)002
E科学计数法1.20E+0011.20E+001
G常规string.Format("{0:G}", 2)2
N用分号隔开的数字string.Format("{0:N}", 250000)250,000.00
X十六进制string.Format("{0:X000}", 12)C


string.Format("{0:000.000}", 12.2)012.200

Strings

There really isn't any formatting within a strong, beyond it's alignment. Alignment works for any argument being printed in a String.Format call.

 

SampleGenerates
String.Format("->{1,10}<-", "Hello");-> Hello<-
String.Format("->{1,-10}<-", "Hello");->Hello <-

Numbers

Basic number formatting specifiers:

 

SpecifierTypeFormat

Output 
(Passed 
Double 1.42)

Output 
(Passed 
Int -12400)

cCurrency{0:c}$1.42-$12,400
dDecimal (Whole number){0:d}System.
FormatException
-12400
eScientific{0:e}1.420000e+000-1.240000e+004
fFixed point{0:f}1.42-12400.00
gGeneral{0:g}1.42-12400
nNumber with commas for thousands{0:n}1.42-12,400
rRound trippable{0:r}1.42System.
FormatException
xHexadecimal{0:x4}System.
FormatException
cf90

Custom number formatting:

 

SpecifierTypeExampleOutput (Passed Double 1500.42)Note
Zero placeholder{0:00.0000}1500.4200Pads with zeroes.
#Digit placeholder{0:(#).##}(1500).42
.Decimal point{0:0.0}1500.4
,Thousand separator{0:0,0}1,500Must be between two zeroes.
,.Number scaling{0:0,.}2Comma adjacent to Period scales by 1000.
%Percent{0:0%}150042%Multiplies by 100, adds % sign.
eExponent placeholder{0:00e+0}15e+2Many exponent formats available.
;Group separatorsee below 

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system's regional settings; the example strings here are from my local locale.

 

SpecifierTypeExample (Passed System.DateTime.Now)
dShort date10/12/2002
DLong dateDecember 10, 2002
tShort time10:11 PM
TLong time10:11:29 PM
fFull date & timeDecember 10, 2002 10:11 PM
FFull date & time (long)December 10, 2002 10:11:29 PM
gDefault date & time10/12/2002 10:11 PM
GDefault date & time (long)10/12/2002 10:11:29 PM
MMonth day patternDecember 10
rRFC1123 date stringTue, 10 Dec 2002 22:11:29 GMT
sSortable date string2002-12-10T22:11:29
uUniversal sortable, local time2002-12-10 22:13:50Z
UUniversal sortable, GMTDecember 11, 2002 3:13:50 AM
YYear month patternDecember, 2002

The 'U' specifier seems broken; that string certainly isn't sortable.

Custom date formatting:

 

SpecifierTypeExampleExample Output
ddDay{0:dd}10
dddDay name{0:ddd}Tue
ddddFull day name{0:dddd}Tuesday
f, ff, ...Second fractions{0:fff}932
gg, ...Era{0:gg}A.D.
hh2 digit hour{0:hh}10
HH2 digit hour, 24hr format{0:HH}22
mmMinute 00-59{0:mm}38
MMMonth 01-12{0:MM}12
MMMMonth abbreviation{0:MMM}Dec
MMMMFull month name{0:MMMM}December
ssSeconds 00-59{0:ss}46
ttAM or PM{0:tt}PM
yyYear, 2 digits{0:yy}02
yyyyYear{0:yyyy}2002
zzTimezone offset, 2 digits{0:zz}-05
zzzFull timezone offset{0:zzz}-05:00
:Separator{0:hh:mm:ss}10:43:20
/Separator{0:dd/MM/yyyy}10/12/2002

Enumerations

 

SpecifierType
gDefault (Flag names if available, otherwise decimal)
fFlags always
dInteger always
xEight digit hex.

Some Useful Examples

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

This will output "$1,240.00" if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string "Zero" if the number is zero.

String.Format("{0:(###) ###-####}", 18005551212);

This will output "(800) 555-1212".

 

变量.ToString()


字符型转换 转为字符串 
12345.ToString("n"); //生成 12,345.00 
12345.ToString("C"); //生成 ¥12,345.00 
12345.ToString("e"); //生成 1.234500e+004 
12345.ToString("f4"); //生成 12345.0000 
12345.ToString("x"); //生成 3039 (16进制) 
12345.ToString("p"); //生成 1,234,500.00%

转载于:https://my.oschina.net/wxwHome/blog/36959

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值