相關(guān)-lambda表達(dá)式Lambda在中寫(xiě)法是arg-listexpr bod_第1頁(yè)
相關(guān)-lambda表達(dá)式Lambda在中寫(xiě)法是arg-listexpr bod_第2頁(yè)
相關(guān)-lambda表達(dá)式Lambda在中寫(xiě)法是arg-listexpr bod_第3頁(yè)
相關(guān)-lambda表達(dá)式Lambda在中寫(xiě)法是arg-listexpr bod_第4頁(yè)
相關(guān)-lambda表達(dá)式Lambda在中寫(xiě)法是arg-listexpr bod_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余12頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

.NET3.5中委托的寫(xiě)法(Lambda表Lambda表達(dá)式在#中的寫(xiě)法是“rg-list=>xr-body”,“=>”符號(hào)左邊為表達(dá)式的參數(shù)列表,右邊則是表達(dá)式體(body)。參數(shù)列表可以包含0到多個(gè)參數(shù),參數(shù)之間使用逗號(hào)分割。例如,以下便是一個(gè)使用Lambda表達(dá)式定義了委托的示例:Func<int,int,int>max=(inta,intb){if(a>{}{}

returnreturn與上文使用delegate定義方法的作用相同,Lambda表達(dá)式的作用也是為了定義一個(gè)方法。因此,下面使用delegate的代碼和上面是等價(jià)的:Func<int,int,int>max=delegate(inta,int{if(a>{}{}

returnreturn那么您可能就會(huì)問(wèn),這樣看來(lái)Lambda表達(dá)式又有什么意義呢?Lambda表達(dá)式的意義便是它可以寫(xiě)的非常簡(jiǎn)單,例如之前的Lambda表達(dá)式可以簡(jiǎn)寫(xiě)成這樣:Func<int,int,int>max=(a,b){if(a>{}{}

returnreturn由于我們已經(jīng)注明max的類(lèi)型是Func<int,intint>,因此C#編譯器可以明確地知道ab都是int類(lèi)型,于是我們就可以省下參數(shù)之前的類(lèi)型信息。這個(gè)特性叫做“類(lèi)型推演”,也就是指編譯器可以自動(dòng)知道某些成員的類(lèi)型2。請(qǐng)不要輕易認(rèn)為這個(gè)小小的改進(jìn)意義不大,事實(shí)上,您會(huì)發(fā)現(xiàn)Lambda表達(dá)式的優(yōu)勢(shì)都是由這一點(diǎn)一滴的細(xì)節(jié)構(gòu)成Func<int,int,int>max=(a,b)=>a>b?a:如果Lambda表達(dá)式的body是一個(gè)表達(dá)式(expression),而不是語(yǔ)(statement)的話,那么它的body就可以省略大括號(hào)和return關(guān)鍵字。此外,如Lambda表達(dá)式只包含一個(gè)參數(shù)的話,則參數(shù)列表的括號(hào)也可以省略,如下Func<int,bool>positive=a=>a>如今的寫(xiě)法是不是非常簡(jiǎn)單?那么我們來(lái)看看,如果是使用delegate關(guān)鍵字來(lái)創(chuàng)建的Func<int,bool>positive=delegate(int{returna>當(dāng)然,Lambda表達(dá)式也并不是可以完全替代delegate寫(xiě)法,例如帶refout關(guān)鍵字的方法,就必須使用.NET2.0中的delegate才能構(gòu)造出來(lái)了。使用示例Lambda表達(dá)式的增強(qiáng)在于“語(yǔ)義”二字?!罢Z(yǔ)義”是指代碼所表現(xiàn)出來(lái)的含義,說(shuō)的更通staticList<int>GetSquaresOfPositive(List<string>{List<int>intList=newforeach(varsinstrList)List<int>evenList=newList<int>();foreach(intiinintList){if(i%2==0)}List<int>squareList=newforeach(intiinevenList)squareList.Add(i*return}新建一個(gè)整數(shù)列表intList,把參數(shù)strList中所有元素轉(zhuǎn)化為整型保存起來(lái)新建一個(gè)整數(shù)列表evenList,把intList中的偶數(shù)保存起來(lái)新建一個(gè)整數(shù)列表squareList,把evenList中所有數(shù)字的平方保存起來(lái)squareList排序返回squareList您可能會(huì)問(wèn):“當(dāng)然如此,還能怎么樣?”。事實(shí)上,如果使用了Lambda表達(dá)式,代staticList<int>GetSquaresOfPositiveByLambda(List<string>{return.Select(sInt32.Parse(s))整.Where(ii20)出所有偶.Select(ii*i)出每個(gè)數(shù)的平.OrderBy(ii)照元素自身排.ToList();造一個(gè)}配合.NET3.5中定義的擴(kuò)展方法,這段代碼可謂“一氣呵成”(在實(shí)際編碼過(guò)程中,老Lambda表達(dá)式的優(yōu)勢(shì)。容。其實(shí)這些都是“怎么做”,也就是所謂的“how(todo)”。但是這些代碼并不能直接表示我們想要做的事情,我們想要做的事情其實(shí)是“得到XXX”,“篩選出YYY”,而不是在使用Lambda表達(dá)式的實(shí)現(xiàn)中,代碼變得“式(declarative)”了許多。所謂“聲么做”。換句話說(shuō),“式”關(guān)注的是“做什么”,是指“what(todo)”。上面這段式的把字符串轉(zhuǎn)化為整篩選出所有偶把每個(gè)偶數(shù)平方一按照平方結(jié)果自身排生成一個(gè)列至于其中具體是怎么實(shí)現(xiàn)的,有沒(méi)有構(gòu)造新的容器,又是怎么向容器里添加元的……這些細(xì)節(jié),使用Lambda表達(dá)式的代碼一概不會(huì)關(guān)心——這又不是我們想要做雖然擴(kuò)展方不可沒(méi),但我認(rèn)為,Lambda表達(dá)式在這里的重要程度尤勝前者,因?yàn)樗?fù)責(zé)了最關(guān)鍵的“語(yǔ)義”。試想,“i=>i*”給您的感覺(jué)是什么呢?是構(gòu)造了一個(gè)委托嗎(當(dāng)然,您一定知道在這里其實(shí)構(gòu)造了一個(gè)方法)?至少對(duì)我來(lái)說(shuō),它的含義是“把i變成i*i”;同樣,“i=>i%2==”給感覺(jué)是“(篩選標(biāo)準(zhǔn)為)i模2等于零”,而不是“構(gòu)造一個(gè)委托,XXX時(shí)返回true,否則返回false”;更有趣的是,OrderBy(i=>i)給感覺(jué)是“把i按照i自身排序”,而不是“一個(gè)返回i自身的委托”。沒(méi)錯(cuò),“類(lèi)型推演”,“省略括號(hào)”和“省略return關(guān)鍵字”可能的確都是些“細(xì)小”的功能,使用示例使用Lambda表達(dá)式還可以節(jié)省許多代碼(相信您從第一個(gè)示例中也可以看出來(lái)staticDictionary<char,List<string>>){...staticDictionary<char,List<string>>){字varresult=newDictionary<char,字foreach(varkw {varfirstChar=kw[0];List<string>group if(!result.TryGetValue(firstChar,out { =newList<string>();result.Add(firstChar,group } }個(gè)分組排foreach(var in{ }return}那么如果利用Lambda表達(dá)式及.NET框架中定義的擴(kuò)展方法,代碼又會(huì)變成什么樣staticDictionary<char,List<string>>){.GroupBy(kk[0])照首字母分.ToDictionary(造字gg.Key每組的Key為gg.OrderBy(kk).ToList()每組排序并生成列}試想,如果我們把GetIndexByLambda方法中的Lambda表達(dá)式改成.NET2.0delegate形式的寫(xiě)法staticDictionary<char,List<string>> {.GroupBy(delegate(stringk){returnk[0];delegate(IGrou<char,string>g){returng.Key;},delegate(IGrou<char,string>g){returng.OrderBy(delegate(strings){s;}您愿意編寫(xiě)這樣的代碼嗎因此,Lambda表達(dá)式在這里還是起著決定性的作用。事實(shí)上正是因?yàn)橛辛薒ambda表達(dá)式,.NET中的一些函數(shù)式編程特性才被真正推廣開(kāi)來(lái)?!罢Z(yǔ)言特性”決定“編程方式”的確非常有道理。這一點(diǎn)上Java是一個(gè)很好的反例:從理論上說(shuō),Java也有“內(nèi)聯(lián)”的寫(xiě)法,但是C#的使用在Java那邊還只能是個(gè)夢(mèng)。試想GetIndexByLambdaJava中會(huì)是什么情況3:publicDictionary<Char,List<String>>){newFunc<String,Char>publicCharexecute(Strings){returns.charAt(0);newFunc<Grou<Char,String>,Char>publicChar <Char,String>g){g.getKey();newFunc<Grou<Char,String>,List<string>>publicList<String>execute(IGrou<Char,String>{s;

returnnewFunc<String,String>publicStringexecute(Strings){}}

一股語(yǔ)法噪音的氣息撲面而來(lái),讓人無(wú)法抵擋。由于Java中的類(lèi)型語(yǔ)法(即上面這種內(nèi)聯(lián)寫(xiě)法)連類(lèi)型信息(newFunc<String,Char>{...}這樣的代碼)都無(wú)法省適合在Java語(yǔ)言中使用。事實(shí)上,這種內(nèi)聯(lián)寫(xiě)法很早就出現(xiàn)了(至少在02、03年我還在使用Java的時(shí)候就已經(jīng)有了),但是那么多年下來(lái)一點(diǎn)改進(jìn)都沒(méi)有。而Lambda表達(dá)式出現(xiàn)之后,社區(qū)中立即跟進(jìn)了大量項(xiàng)目,如Moq,F(xiàn)luentNHibernate等等,充分運(yùn)用了C#3.0的這一新特性。難道這還不夠說(shuō)明問(wèn)題嗎?對(duì)了,再次推薦一下Scala語(yǔ)言,它的代碼可以寫(xiě)的和C#一樣漂亮。我不是Java平臺(tái)的粉絲,更是Java語(yǔ)言的忠實(shí)者,但是我對(duì)Java平臺(tái)上的Scala語(yǔ)言和開(kāi)源編程在里面,例如,對(duì)于函數(shù)試編程來(lái)說(shuō),Where常被叫做filter,Select常被叫做map。而.NET3.5中定義的另一些方法在函數(shù)式編程里都有體現(xiàn)(如Aggregate相當(dāng)于fold)。如果您對(duì)這方面感,可以關(guān)注MatthewPoswysockiFunctionalC#類(lèi)庫(kù)??偧瓤梢蕴岣呖勺x性,又能夠減少代碼數(shù)量,我實(shí)在找不出任何理由Lambda表達(dá)當(dāng)然,世界上沒(méi)有東西是完美的,如果您覺(jué)得Lambda表達(dá)式在某些時(shí)候會(huì)給您帶來(lái)“危害”,那么也不妨使用delegate代替Lambda表達(dá)式。例如,為了代碼清晰,在某Lambda表達(dá)式——最多使用“(inta,stringb)=>”的形式咯,總比“delegate(inta,stringb)”要統(tǒng)一、省事一些吧。Lambda表達(dá)式(達(dá)表達(dá)式)和方法其實(shí)是一件事情。唯一的不同是:他們語(yǔ)法表現(xiàn)形式不同。Lambda表達(dá)式是在語(yǔ)法方面的更進(jìn)一步的進(jìn)化。在本質(zhì)上,他C#首席架構(gòu)師AndersHejlsberg的原話 lambdaexpressionsandanonymousmethodsarereallyjusttwowordsforthesamething.Theonlythingthatdiffersis,"Whatdoesthesyntaxlooklike?"Andthelambdaexpressionsareafurtherevolutionofthesyntax.Butunderneath,theydothesamething.Theygeneratemethods.Youknow,they'rein-linemethods.所以:我們要了解Lambda表達(dá)式就應(yīng)該同時(shí)也了解方法。下面先看一個(gè)簡(jiǎn)單的代碼例子,分別用方法和Lambda表達(dá)式來(lái)實(shí)現(xiàn)對(duì)數(shù)組的搜索:使用.net2.0的方法來(lái)搜索字符串?dāng)?shù)組中包含a的字符串?dāng)?shù)staticvoidMain(string[]{string[]list=newstring[]{"abc","12","java"};string[]ll=Array.FindAll(list,delegate(string{returns.IndexOf("a")>=}foreach(stringvarin{Console.Wri}}.net3.5Lambda表達(dá)式來(lái)搜索字符串?dāng)?shù)組中包a的字符串?dāng)?shù)staticvoidMain(string[]{string[]list=newstring[]{"abc","12","java"string[]ll=Array.FindAll(list,s=>(s.IndexOf("a")>=0));foreach(stringvarinll){Console.Wri}}從上述兩個(gè)例子我們可以看出從代碼書(shū)寫(xiě)角度,代碼可讀性角度來(lái)說(shuō):Lambda表達(dá)式比方法更簡(jiǎn)單了而Lambda表達(dá)式和方法都是干的同一件事情,讓我們少寫(xiě)一個(gè)函數(shù)定義。函Lambda表達(dá)式的書(shū)寫(xiě)格式如下:(參數(shù)列表)=>表達(dá)式或者語(yǔ)句塊表達(dá)式或者語(yǔ)句塊:這部分就是我們平常寫(xiě)函數(shù)的實(shí)現(xiàn)部分(函數(shù)體)一些Lambda表達(dá)式的書(shū)寫(xiě)范例有兩個(gè)參數(shù)的Lambda表達(dá)式例子注:別看比較復(fù)雜,LINQ中實(shí)際把述代碼中的delegate,DoSomeThing替你vartDoSomeThing(7,8(x,y)x*y);這么一行publicdelegateTHongJunGuoTest01(Tt1,Tt2);classProgram{privatestaticTDoSomeThing(Tt1,Tt2,HongJunGuoTest01{returnmatch(t1,}staticvoidMain(string[]{vart=DoSomeThing(7,8,(x,y)=>x*y);}}下面這些寫(xiě)法也是對(duì)的(你只需要修改Main函數(shù)中的代碼,其他地方不需要?jiǎng)觱art=DoSomeThing(7,8,(intx,inty)=>x*y);vart=DoSomeThing("7","8",(x,y)=>x+y);或者我們寫(xiě)一個(gè)更復(fù)雜的=>右邊是一段語(yǔ)句塊vart=DoSomeThing(7,8,(x,y)=>{if(x<5){return(x+8)*y;}else{returny;}publicdelegatevoidHongJunGuoTest02();classProgram{{}staticvoidMain(string[]{DoSomeThing(()=>Console.Wriine("jajaja"));}}函數(shù)式編方法,Lambda表達(dá)式是函數(shù)式編程思想下的產(chǎn)物,“Lambda表達(dá)式”是一個(gè)函數(shù),它可以包含表達(dá)式和語(yǔ)句,并且可用于創(chuàng)建委托 所有Lambda表達(dá)式都使用Lambda運(yùn)算符=>,該運(yùn)算符讀為“goesto”。該Lambda運(yùn)算符的左邊是輸入?yún)?shù)(如果有),右邊包含表達(dá)式或語(yǔ)句塊。Lambda表達(dá)式xx*x讀作“xgoestoxtimesx”??梢詫⒋吮磉_(dá)式分配給委托類(lèi)型,delegateintdel(intdelmyDelegate=x=>x*x;intj=myDelegate(5);//j=25創(chuàng)建表達(dá) 樹(shù)類(lèi)型using//Expression<del>=x=>x*=>運(yùn)算符具有與賦值運(yùn)算符(=)相同的優(yōu)先級(jí),并且是右結(jié)合運(yùn)算符。Lambda用在基于方法的LINQ查詢(xún)中,作為諸如WhereWhere等標(biāo)準(zhǔn)查詢(xún)使用基于方法的語(yǔ)法在Enumerable類(lèi)中調(diào)用Where方法時(shí)(像在LINQtoObjects和LINQtoXML中那樣),參數(shù)是委托類(lèi)型System.Func<T,TResult>。使用Lambda表達(dá)式創(chuàng)建委托最為方便。例如,當(dāng)在System.Linueryable類(lèi)中調(diào)用相同的方法時(shí)(像在LINQtoSQL中樣),則參數(shù)類(lèi)型是System.Linq.Expressions.Expression<Func>,其中Func是包含至多五個(gè)輸入?yún)?shù)的任何Func委托。同樣,Lambda表達(dá)式只是一種用于 樹(shù)的非常簡(jiǎn)練的方式。盡管事實(shí)上通過(guò)Lambda創(chuàng)建的對(duì)象的類(lèi)型是不同的,但Lambda使得Where調(diào)用看起來(lái)類(lèi)似。面的示例中,請(qǐng)注意委托簽名具有一個(gè)int類(lèi)型的隱式類(lèi)型輸入?yún)?shù),并int??梢詫ambda表達(dá)式轉(zhuǎn)換為該類(lèi)型的委托,因?yàn)樵摫磉_(dá)式也具有一個(gè)輸入?yún)?shù)(x),以及一個(gè)編譯器可隱式轉(zhuǎn)換為int類(lèi)型的返回值。(以下幾節(jié)中將對(duì)類(lèi)型推理進(jìn)行詳細(xì)討論。)使用輸入?yún)?shù)5調(diào)用委托時(shí),它將返回結(jié)果25。isas運(yùn)算符的左側(cè)不允許使用Lambda適用于方法的所有限制也適用于Lambda表達(dá)式。有關(guān)信息,請(qǐng)參見(jiàn)方法(C#編程指南)。Lambda表達(dá)表達(dá)式在右邊的Lambda表達(dá)式稱(chēng)為“Lambda表達(dá)式”。Lambda表達(dá)式在構(gòu)造 樹(shù)時(shí)廣泛使用。Lambda表達(dá)式返回表達(dá)式的結(jié)果,并采用以下基本形(inputparameters)=>只有在Lambda有一個(gè)輸入?yún)?shù)時(shí),括號(hào)才是可選的;否則括號(hào)是必需的。兩個(gè)或(x,y)=>x==(intx,strings)=>s.Length>使用空括號(hào)指定零個(gè)輸入?yún)?shù)()=>在上一個(gè)示例中,請(qǐng)注意Lambda表達(dá)式的主體可以包含方法調(diào)用。但是,如果要?jiǎng)?chuàng)建將在另一個(gè)域(比如SQLServer)中使用的表達(dá)式 樹(shù),則不應(yīng)在Lambda表達(dá)式中使用方法調(diào)用。方法在.NET公共語(yǔ)言運(yùn)行時(shí)上下文的外部將沒(méi)有意義。Lambda語(yǔ)Lambda語(yǔ)句與Lambda表達(dá)式類(lèi)似,只是語(yǔ)句括在大括號(hào)中(inputparameters)=>Lambda語(yǔ)句的主體可以包含任意數(shù)量的語(yǔ)句;但是,實(shí)際上通常不會(huì)多于兩個(gè)或三delegatevoidTestDelegate(string…TestDelegatemyDel=n=>{strings=n+""+"World"; ine(s);}; 像方法一樣,Lambda語(yǔ)句無(wú)法用于創(chuàng)建表達(dá)式 帶有標(biāo)準(zhǔn)查詢(xún)運(yùn)算符的Lambda許多標(biāo)準(zhǔn)查詢(xún)運(yùn)算符都具有輸入?yún)?shù),其類(lèi)型是泛型委托的Func<T,TResult>系列的其中之一。Func<T,TResult>委托使用類(lèi)型參數(shù)來(lái)定義輸入?yún)?shù)的數(shù)量和類(lèi)型,以及委托的返回類(lèi)型。Func委托對(duì)于封裝應(yīng)用于一組源數(shù)據(jù)中每個(gè)元素的用戶(hù)publicdelegateTResultFunc<TArg0,TResult>(TArg0可以將委托實(shí)例化為Func<int,bool>myFunc,其中int是輸入?yún)?shù),bool是返回值。返回值始終在最后一個(gè)類(lèi)型參數(shù)中指定。Func<intstring,bool定義包含兩個(gè)輸入?yún)?shù)(int和string)且返回類(lèi)型為bool的委托。在調(diào)用下面Func委托時(shí),該委托將返回truefalse以指示輸入?yún)?shù)是否等于Func<int,bool>myFunc=x=>x==boolresult=myFunc(4);//returnsfalseof當(dāng)參數(shù)類(lèi)型為Expression<Func>時(shí),您也可以提供Lambda表達(dá)式,例如System.Linueryable內(nèi)定義的標(biāo)準(zhǔn)查詢(xún)運(yùn)算符中。如果定Expression<Func>參數(shù),Lambda將編譯為表達(dá)式 此處顯示了一個(gè)標(biāo)準(zhǔn)查詢(xún)運(yùn)算符,Count方法:int[]numbers={5,4,1,3,9,8,6,7,2,0intoddNumbers=numbers.Count(n=>n%2==編譯器可以推斷輸入?yún)?shù)的類(lèi)型,或者您也可以顯式指定該類(lèi)型。這個(gè)特別Lambda表達(dá)式將計(jì)算整數(shù)(n)的數(shù)量,這些整數(shù)除以2時(shí)余數(shù)為1varfirstNumbersLessThan6=numbers.TakeWhile(n=>n<數(shù)組中的所有元素,直至遇到一個(gè)值小于其位置的數(shù)字為止。不要將Lambda運(yùn)算符(=>)與大于等于運(yùn)算符(=>)。varfirstSmallNumbers=numbers.TakeWhile((n,index)=>n>=Lambda中的類(lèi)型推在編寫(xiě)Lambda時(shí),通常不必為輸入?yún)?shù)指定類(lèi)型,因?yàn)榫幾g器可以基于Lambda主體、基礎(chǔ)委托類(lèi)型以及C#3.0語(yǔ)言規(guī)范中描述的其他因素推斷類(lèi)型。對(duì)于大多數(shù)IEnumerable<Customer>,則輸入變量將被推斷為Customer對(duì)象,這意味著您可以其方法和屬性:customers.Where(c=>c.City==Lambda的一般規(guī)則如下Lambda包含的參數(shù)數(shù)量必須與委托類(lèi)型包含的參數(shù)數(shù)量相同Lambda中的每個(gè)輸入?yún)?shù)必須都能夠隱式轉(zhuǎn)換為其對(duì)應(yīng)的委托參數(shù)Lambda的返回值(如果有)必須能夠隱式轉(zhuǎn)換為委托的返回類(lèi)型請(qǐng)注意,Lambda表達(dá)式本身沒(méi)有類(lèi)型,因?yàn)橥ㄓ妙?lèi)型系統(tǒng)沒(méi)有“Lambda表達(dá)式”這一概念。但是,有時(shí)會(huì)不正式地論及Lambda表達(dá)式的“類(lèi)型”。在這些情況下,類(lèi)型是指委托類(lèi)型或Lambda表達(dá)式所轉(zhuǎn)換為的Expression類(lèi)型。Lambda表達(dá)式中的變

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論