ThinkinginLINQHarnessingthePowerofFunctionalProgrammingin.
NETApplicationsSudiptaMukherjeeThinkinginLINQ:Harnessingthepoweroffunctionalprogramingin.
NETapplicationsCopyright2014bySudiptaMukherjeeThisworkissubjecttocopyright.
AllrightsarereservedbythePublisher,whetherthewholeorpartofthematerialisconcerned,specificallytherightsoftranslation,reprinting,reuseofillustrations,recitation,broadcasting,reproductiononmicrofilmsorinanyotherphysicalway,andtransmissionorinformationstorageandretrieval,electronicadaptation,computersoftware,orbysimilarordissimilarmethodologynowknownorhereafterdeveloped.
Exemptedfromthislegalreservationarebriefexcerptsinconnectionwithreviewsorscholarlyanalysisormaterialsuppliedspecificallyforthepurposeofbeingenteredandexecutedonacomputersystem,forexclusiveusebythepurchaserofthework.
DuplicationofthispublicationorpartsthereofispermittedonlyundertheprovisionsoftheCopyrightLawofthePublisher'slocation,initscurrentversion,andpermissionforusemustalwaysbeobtainedfromSpringer.
PermissionsforusemaybeobtainedthroughRightsLinkattheCopyrightClearanceCenter.
ViolationsareliabletoprosecutionundertherespectiveCopyrightLaw.
ISBN-13(pbk):978-1-4302-6845-1ISBN-13(electronic):978-1-4302-6844-4Trademarkednames,logos,andimagesmayappearinthisbook.
Ratherthanuseatrademarksymbolwitheveryoccurrenceofatrademarkedname,logo,orimage,weusethenames,logos,andimagesonlyinaneditorialfashionandtothebenefitofthetrademarkowner,withnointentionofinfringementofthetrademark.
Theuseinthispublicationoftradenames,trademarks,servicemarks,andsimilarterms,eveniftheyarenotidentifiedassuch,isnottobetakenasanexpressionofopinionastowhetherornottheyaresubjecttoproprietaryrights.
Whiletheadviceandinformationinthisbookarebelievedtobetrueandaccurateatthedateofpublication,neithertheauthorsnortheeditorsnorthepublishercanacceptanylegalresponsibilityforanyerrorsoromissionsthatmaybemade.
Thepublishermakesnowarranty,expressorimplied,withrespecttothematerialcontainedherein.
ManagingDirector:WelmoedSpahrLeadEditor:JamesDeWolfDevelopmentEditors:RussellJonesTechnicalReviewer:FabioClaudioFerracchiatiEditorialBoard:SteveAnglin,MarkBeckner,GaryCornell,LouiseCorrigan,JamesDeWolf,JonathanGennick,RobertHutchinson,MichelleLowman,JamesMarkham,MatthewMoodie,JeffOlson,JeffreyPepper,DouglasPundick,BenRenow-Clarke,GwenanSpearing,MattWade,SteveWeissCoordinatingEditor:KevinWalterCopyEditor:SharonWilkeyCompositor:SPiGlobalIndexer:SPiGlobalArtist:SPiGlobalCoverDesigner:AnnaIshchenkoDistributedtothebooktradeworldwidebySpringerScience+BusinessMediaNewYork,233SpringStreet,6thFloor,NewYork,NY10013.
Phone1-800-SPRINGER,fax(201)348-4505,e-mailorders-ny@springer-sbm.
com,orvisitwww.
springeronline.
com.
ApressMedia,LLCisaCaliforniaLLCandthesolemember(owner)isSpringerScience+BusinessMediaFinanceInc.
(SSBMFinanceInc.
).
SSBMFinanceInc.
isaDelawarecorporation.
Forinformationontranslations,pleasee-mailrightsrights@apress.
com,orvisitwww.
apress.
com.
ApressandfriendsofEDbooksmaybepurchasedinbulkforacademic,corporate,orpromotionaluse.
eBookversionsandlicensesarealsoavailableformosttitles.
Formoreinformation,referenceourSpecialBulkSales–eBookLicensingwebpageatwww.
apress.
com/bulk-sales.
Anysourcecodeorothersupplementarymaterialreferencedbytheauthorinthistextisavailabletoreadersatwww.
apress.
com.
Fordetailedinformationabouthowtolocateyourbook'ssourcecode,gotowww.
apress.
com/source-code/.
Sohan,thisisforyou,myson.
Youhavebeenmyinspiration.
vContentsataGlanceAbouttheAuthorxxvAbouttheTechnicalReviewerxxviiAcknowledgmentsxxixIntroductionxxxiChapter1:ThinkingFunctionally1Chapter2:SeriesGeneration7Chapter3:TextProcessing49Chapter4:RefactoringwithLINQ89Chapter5:RefactoringwithMoreLINQ109Chapter6:CreatingDomain-SpecificLanguages123Chapter7:StaticCodeAnalysis151Chapter8:ExploratoryDataAnalysis165Chapter9:InteractingwiththeFileSystem195AppendixA:LeanLINQTips205AppendixB:TamingStreamingDatawithRx.
NET211Index231viiContentsAbouttheAuthorxxvAbouttheTechnicalReviewerxxviiAcknowledgmentsxxixIntroductionxxxiChapter1:ThinkingFunctionally11-1.
UnderstandingFunctionalProgramming11-2.
UsingFuncinC#toRepresentFunctions21-3.
UsingVariousTypesofFunctions2GeneratorFunctions3StatisticalFunctions3ProjectorFunctions3Filters31-4.
UnderstandingtheBenefitsofFunctionalProgramming4Composability4LazyEvaluation4Immutability4Parallelizable4Declarative51-5.
GettingLINQPad5ContentsviiiChapter2:SeriesGeneration72-1.
MathandStatistics:FindingtheDotProductofTwoVectors7Problem7Solution7HowItWorks82-2.
MathandStatistics:GeneratingPythagoreanTriples8Problem8Solution8HowItWorks92-3.
MathandStatistics:FindingaWeightedSum9Problem9Solution9HowItWorks102-4.
MathandStatistics:FindingthePercentileforEachElementinanArrayofNumbers10Problem10Solution10HowItWorks122-5.
MathandStatistics:FindingtheDominatorinanArray12Problem12Solution12HowItWorks132-6.
MathandStatistics:FindingtheMinimumNumberofCurrencyBillsRequiredforaGivenAmount13Problem13Solution13HowItWorks142-7.
MathandStatistics:FindingMovingAverages14Problem14Solution15HowItWorks15Contentsix2-8.
MathandStatistics:FindingaCumulativeSum16Problem16Solution16HowItWorks172-9.
RecursiveSeriesandPatterns:GeneratingRecursiveStructuresbyUsingL-SystemGrammar17Problem17Solution17HowItWorks182-10.
RecursiveSeriesandPatternsStep-by-StepGrowthofAlgae18Problem18Solution18HowItWorks192-11.
RecursiveSeriesandPatterns:GeneratingLogoCommandstoDrawaKochCurve20Problem20Solution20HowItWorks212-12.
RecursiveSeriesandPatterns:GeneratingLogoCommandstoDrawaSierpinskiTriangle21Problem22Solution22HowItWorks222-13.
RecursiveSeriesandPatterns:GeneratingFibonacciNumbersNonrecursively(MuchFaster)23Problem23Solution23HowItWorks242-14.
RecursiveSeriesandPatterns:GeneratingPermutations24Problem24Solution24HowItWorks25Contentsx2-15.
RecursiveSeriesandPatterns:GeneratingaPowerSetofaGivenSet26Problem26Solution26HowItWorks272-16.
Collections:PickingEverynthElement27Problem27Solution27HowItWorks282-17.
Collections:FindingtheLargerorSmallerofSeveralSequencesatEachIndex28Problem28Solution28HowItWorks302-18.
NumberTheory:GeneratingArmstrongNumbersandSimilarNumberSequences31Problem31Solution31HowItWorks332-19.
NumberTheory:GeneratingPascal'sTriangleNonrecursively34Problem34Solution35HowItWorks362-20.
GameDesign:FindingAllWinningPathsinanArbitraryTic-Tac-ToeBoard36Problem36Solution37HowItWorks382-21.
SeriesinGameDesign:SolvingGoFigure38Problem38Solution39HowItWorks40Contentsxi2-22.
MiscellaneousSeries:FindingMatchingPairsfromTwoUnsortedCollections41Problem41Solution41HowItWorks422-23.
MiscellaneousSeries:UsingaLookup-BasedApproach42Problem43Solution43HowItWorks432-24.
MiscellaneousSeries:SolvingtheFizzBuzzChallengeinaLINQOne-Liner44Problem44Solution45HowItWorks462-25.
MiscellaneousSeries:SolvingtheFizzBuzzChallengebyUsingSetTheory46Problem46Solution46HowItWorks47Summary48Chapter3:TextProcessing493-1.
SimulatingaT9WordSuggestion49Problem50Solution50HowItWorks513-2.
SimulatingaGestureKeyboard53Problem53Solution53HowItWorks543-3.
CloningPeterNorvig'sSpelling-CorrectionAlgorithm54Problem55Solution55HowItWorks57Contentsxii3-4.
ReversingaSentenceWordbyWord57Problem57Solution57HowItWorks583-5.
CreatingaWordTriangle58Problem58Solution58HowItWorks593-6.
FindingAnagrams59Problem59Solution59HowItWorks603-7.
CheckingforAnagramsWithoutSortingCharacters60Problem60Solution60HowItWorks613-8.
CreatingaRudimentaryProgrammingLanguageIdentifierandAutomaticSyntaxHighlighter62Problem62Solution62HowItWorks643-9.
CreatingaWord-LadderSolver66Problem66Solution66HowItWorks683-10.
FormattingontheFly69Problem69Solution70HowItWorks71Contentsxiii3-11.
SolvingEricLippert'sComma-QuibblingProblem71Problem72Solution72HowItWorks723-12.
GeneratingRandomSerials72Problem72Solution73HowItWorks733-13.
GeneratingAllSubstringsofaGivenString74Problem74Solution74HowItWorks753-14.
CreatingaScrabbleCheater75Problem75Solution75HowItWorks773-15.
FindingAlltheSubsequencesofaGivenString79Problem79Solution79HowItWorks803-16.
SqueezingaParagraphtoFillTightly82Problem82Solution82HowItWorks833-17.
PrintingtheLinesofaSong83Problem83Solution84HowItWorks85Contentsxiv3-18.
MiningAbbreviationsandFullFormsfromNewsArticles85Problem85Solution85HowItWorks86Summary87Chapter4:RefactoringwithLINQ894-1.
ReplacingLoopsbyUsingLINQOperators89AGeneralStrategytoTransformaLooptoaLINQQuery904-2.
TheAnyOperator91Problem91Solution91HowItWorks914-3.
TheAllOperator91Problem91Solution91HowItWorks914-4.
TheTakeOperator92Problem92Solution92HowItWorks924-5.
TheSkipOperator92Problem92Solution93HowItWorks934-6.
TheTakeWhileOperator93Problem93Solution93HowItWorks93Contentsxv4-7.
TheSkipWhileOperator94Problem94Solution94HowItWorks944-8.
TheWhereOperator95Problem95Solution95HowItWorks954-9.
TheZipOperator95Problem95Solution95HowItWorks964-10.
OrderByandOrderByDescendingOperators96Problem96Solution96HowItWorks974-11.
TheDistinctOperator97Problem97Solution97HowItWorks974-12.
TheUnionOperator98Problem98Solution98HowItWorks984-13.
TheIntersectOperator99Problem99Solution99HowItWorks99Contentsxvi4-14.
TheExceptOperator100Problem100Solution100HowItWorks1004-15.
TheConcatOperator101Problem101Solution101HowItWorks1014-16.
TheSequenceEqualOperator101Problem101Solution101HowItWorks1024-17.
TheOfTypeOperator103Problem103Solution103HowItWorks1034-18.
TheCastOperator103Problem103Solution103HowItWorks1034-19.
TheAggregateOperator104Problem104Solution104HowItWorks1044-20.
ReplacingNestedLoops105TheSelectManyOperator105RemovingNestedLoopsbyUsingSelectMany105ReplacingIf-ElseBlocksInsideaLoop106Contentsxvii4-21.
RunningCodeinParallelUsingAsParallel()andAsOrdered()Operators106Problem107Solution107HowItWorks108Summary108Chapter5:RefactoringwithMoreLINQ1095-1.
GettingMoreLINQ1095-2.
UsingtheScanOperator109Problem109Solution109HowItWorks1105-3.
UsingtheSliceOperator110Problem110Solution110HowItWorks1115-4.
UsingtheInterleaveOperator111Problem111Solution111HowItWorks1125-5.
UsingtheWindowedOperator113Problem113Solution113HowItWorks1145-6.
UsingtheCartesianOperator115Problem115Solution115HowItWorks115Contentsxviii5-7.
UsingthePartitionOperator116Problem116Solution117HowItWorks1185-8.
UsingtheIndexOperator118Problem118Solution119HowItWorks1195-9.
UsingthePairWiseOperator119Problem119Solution120HowItWorks1205-10.
TheForEachOperator121Problem121Solution121HowItWorks1215-11.
UsingtheMinBy/MaxByOperator122Problem122Solution122HowItWorks122Summary122Chapter6:CreatingDomain-SpecificLanguages1236-1.
FeeltheDifference1236-2.
CreatingaSimpleDSLforMathematicians124Problem124Solution124HowItWorks1286-3.
TestingArmstrongbyUsingNUnit129Problem129Solution129HowItWorks133Contentsxix6-4.
ExposingArmstrongasanExternalDSL133Problem133Solution134HowItWorks1396-5.
CloningHandyF#FunctionsbyUsingLINQ139Problem140Solution140HowItWorks1456-6.
LazilyGeneratingItemsfromaRecurrenceRelation146Problem146Solution147HowItWorks149Summary149Chapter7:StaticCodeAnalysis1517-1.
FindingVerboseTypeNamesinthe.
NET3.
5Framework151Problem151Solution151HowItWorks1527-2.
FindingtheNumberofOverloadsforaMethod152Problem153Solution153HowItWorks1547-3.
FindingtheSizeofaNamespace154Problem154Solution154HowItWorks1557-4.
FindingtheCode-to-Comment(C#Style)Ratio156Problem156Solution156HowItWorks157Contentsxx7-5.
FindingtheSizeofTypes158Problem158Solution158HowItWorks1597-6.
GeneratingDocumentationAutomatically159Problem159Solution159HowItWorks1607-7.
FindingInheritanceRelationships161Problem161Solution161HowItWorks1627-8.
LocatingComplexMethods162Problem162Solution163HowItWorks164Summary164Chapter8:ExploratoryDataAnalysis1658-1.
AnalyzingtheTitanicSurvivorsDataset165Problem166Solution166HowItWorks167Problem168Solution168HowItWorks1708-2.
ConvertingSurveyMonkeyResultstoCSV170Problem170Solution170HowItWorks172Contentsxxi8-3.
AnalyzingTrendsinBabyNames172Problem173Solution173HowItWorks1778-4.
AnalyzingStockValues177Problem177Solution177HowItWorks1798-5.
AnalyzingGitLogs179Problem180Solution180HowItWorks181Problem182Solution182HowItWorks1848-6.
AnalyzingMovieRatings184Problem185Solution185HowItWorks1878-7.
IdentifyingFlowersbyUsingMachineLearning191Problem191Solution191HowItWorks193Summary193Chapter9:InteractingwiththeFileSystem1959-1.
ComparingTwoCSVFiles195Problem195Solution195HowItWorks196Contentsxxii9-2.
FindingtheTotalFileSizeinaDirectory197Problem197Solution197HowItWorks1979-3.
CloningLINUXHeadandTailCommands197Problem198Solution198HowItWorks1999-4.
LocatingFileswiththeSameName(PossibleDuplicates)199Problem199Solution200HowItWorks2009-5.
FindingExact-DuplicateFiles200Problem200Solution200HowItWorks2019-6.
OrganizingDownloadsAutomatically201Problem201Solution201HowItWorks2029-7.
FindingFilesModifiedLastWeek202Problem202Solution203HowItWorks2039-8.
LocatingDeadFiles(FileswithZeroBytes)203Problem203Solution204HowItWorks204AppendixA:LeanLINQTips205Tip1205Explanation205ContentsxxiiiTip2205Explanation205Tip3206Explanation206Tip4206Explanation206Tip5206Explanation206Tip6206Explanation206Tip7207Explanation207Tip8207Explanation207Tip9207Explanation207Tip10207Explanation207Tip11208Explanation208Tip12208Explanation208Tip13208Explanation208Tip14208Explanation208Tip15209Explanation209Tip16209Explanation209ContentsxxivTip17209Explanation209AppendixB:TamingStreamingDatawithRx.
NET211ABriefExplanationoftheInterfaces213GettingRx.
NET213UsingRx.
NETinLINQPad213CreatingObservablesandSubscribing216Range216Repeat217Never217Interval217Generate217ToObservable219CreatingObservablesfrom.
NETEvents219Subscribe220CombiningObservableCollections220Concat220Merge221Amb223Zip223PartitioningObservables225Window225Time-TaggingObservables226Timestamp226TimeInterval227Rx.
NETShowcase228CreatingaSignatureCaptureScreen228LiveFileSystemWatcher229Summary230Index231xxvAbouttheAuthorSudiptaMukherjeeisanexperiencedprogrammer.
BorninShibpur,atownintheHowrahdistrictofWestBengalinIndia,hegrewupinBally,anothersmalltownintheHowrahdistrict.
HehasbeenworkingwithC#andLINQsincetheywerefirstreleased,andisanenthusiasticadvocateforLINQ.
Sudiptaisaprolificauthor,whosepreviousbooksincludeDataStructuresUsingC(http://goo.
gl/pttSh)and.
NET4.
0Generics:Beginner'sGuide(http://goo.
gl/LwVmZ5).
Hisinterestsaredatastructure,algorithms,textprocessing,machinelearning,naturallanguageprocessing,programminglanguages,andtoolsdevelopment.
Whennotworkingathisdayjoborwritingbooks,Sudiptalikesspendingtimewithhisfamilyandfollowinghispassionofsketchingandpainting.
SudiptalivesinBangaloreandcanbecontactedviae-mailatsudipto80@yahoo.
comoronTwitter@samthecoder.
xxviiAbouttheTechnicalReviewerFabioClaudioFerracchiatiisaseniorconsultantandasenioranalyst/developerusingMicrosofttechnologies.
HeworksatBluArancioSpA(www.
bluarancio.
com)asasenioranalyst/developerandMicrosoftDynamicsCRMSpecialist.
HeisaMicrosoftCertifiedSolutionDeveloperfor.
NET,aMicrosoftCertifiedApplicationDeveloperfor.
NET,aMicrosoftCertifiedProfessional,andaprolificauthorandtechnicalreviewer.
Overthepasttenyears,he'swrittenarticlesforItalianandinternationalmagazinesandcoauthoredmorethantenbooksonavarietyofcomputertopics.
xxixAcknowledgmentsAbooklikethiscan'tbepublishedwithoutcontinuoussupportfromthepublisher,editors,andthetechnicalreviewer.
IamverythankfultoJamesT.
DeWolfandKevinWalterofApressforbeingpatientandsupportive.
Ihadincrediblesupportfrommydevelopmenteditor,RussellJones.
IalsowanttothankFabioClaudioFerracchiatiforhisinvaluablehelpinreviewingandrunningeachandeveryprogramthatIwrote.
Thanksalot,gentlemen.
Anybodywhohaseverwrittenatechnicalbookwillprobablytellyouthatitisnoteasytofollowthispathuntiltheend.
Itrequiresalotofpatienceandsupport.
ThankstoGod,Ihavealotapatience.
AndIhadtremendoussupport,especiallyfrommywife,Mou,andeverybodyinmyfamily.
Thankyou,sweetheart!
Lastbutnotleast,IwanttothankGodonceagainforgivingmemylittleangel,Sohan.
Itissuchajoytobewithhim.
Ihavelearnedalotfromhim;hisperseveranceespeciallyhashelpedmeovercomesomeofmyownstumblingblocksinlife.
xxxiIntroductionThisbookwon'tteachyouthebasicsofLINQ.
Itwillteachyouhowtouseitappropriately.
Havingajackhammerisgreatonlyifyouknowhowtouseitproperly;otherwise,youarenotmuchbetteroffthansomeonewithahammer.
LINQispowerful.
Powerfulbeyondmeasure.
Ihopeyouwillseesomeofthatpowerbyfollowingtheexamplesinthebook.
Hereisabriefwalk-throughofthechapters:Chapter1:ThinkingFunctionallyOurgenerationofprogrammershasbeenraisedwithobject-orientedprogrammingideas.
Thisinitialchapterisdedicatedtoshowinghowfunctionalprogrammingisdifferentfromobject-orientedprogramming.
Thischaptersetsthecontextfortherestofthebook.
Chapter2:SeriesGenerationThischapterhasrecipesforgeneratingseveralseriesusingLINQ.
Forexample,itshowshowtogeneraterecursivepatternsandmathematicalseries.
Chapter3:TextProcessingTextprocessingisablankettermusedtocoverarangeoftasks,fromgenerationoftexttospell-checking.
ThischaptershowshowtouseLINQtoperformseveraltext-processingtasksthatareseeminglycommonplace.
Chapter4:RefactoringwithLINQLegacycodebasesgrow,andgrowfast—fasterthanyoumightthinktheywould.
Maintainingsuchhugecodeblockscanbecomeanightmare.
WhenisthelasttimeyouhadtroubleunderstandingwhatsomecomplexloopcodedoesThischaptershowshowtorefactoryourlegacyloopstoLINQ.
Chapter5:RefactoringwithMoreLINQMoreLINQisanopensourceLINQAPIthathasseveralmethodsforslicinganddicingdata.
SomeoftheseoperatorsareeasilycomposableusingotherLINQoperators.
Butsomearealsotrulyhelpfulinminimizingthetotalnumberofcodelines.
ThischaptershowshowyoucanbenefitfromusingMoreLINQ.
Chapter6:CreatingDomain-SpecificLanguagesUsingLINQDomain-specificlanguages(DSLs)aregaininginpopularitybecausetheyconveytheintentoftheprogrammerverynicely.
ThischaptershowshowtocreateseveralDSLs.
Chapter7:StaticCodeAnalysisLINQtreatseverythingasdata.
Codeisalsodata.
Thischaptershowshow,byusingLINQ-to-Reflection,youcandoalotofmetaprogrammingin.
NET.
IntroductionxxxiiChapter8:ExploratoryDataAnalysisThischaptershowshowyoucanuseLINQtosolveseveraldataanalysistasks.
Ihopeyoufindthischapterenjoyable,becausetheexamplesarereallyinteresting.
Chapter9:InteractionwiththeFileSystemIhavealwayswishedthatWindowsExplorerincludedbetterfeaturesforqueryingthefilesystem.
However,byusingLINQ,youcanbuildyourowncustomqueriesquickly.
Thischaptershowsyousomeexamplesthatcanbeusefulintherealworld.
AppendixA:LeanLINQTipsLINQisanAPIthatprovidesseveraloperatorstoexpressyourintent.
Althoughthatissuperpowerful,itcomeswithaprice.
Ifyoudon'tknowhowtheseoperatorsworkinternally,youmightendupusingacombinationthatresultsinslowercode.
Thisappendixprovidessomehard-earnedknowledgeabouthowtoglueLINQoperatorstogetherforoptimumperformance.
AppendixB:TamingStreamingDatawithRx.
NETBeingreactiveisimportantwhendealingwithstreamingdata.
Microsoft'süber-coolframework,Rx.
NET,isafantasticAPIfordealingwithstreamingdataandasyncoperations.
ThisappendixshowshowtouseRx.
NETtotacklestreamingdata.
VoLLcloud LLC是一家成立于2020年12月互联网服务提供商企业,于2021年1月份投入云计算应用服务,为广大用户群体提供云服务平台,已经多个数据中心部署云计算中心,其中包括亚洲、美国、欧洲等地区,拥有自己的研发和技术服务团队。现七夕将至,VoLLcloud LLC 推出亚洲地区(香港)所有产品7折优惠,该产品为CMI线路,去程三网163,回程三网CMI线路,默认赠送 2G DDoS/C...
Ceraus数据成立于2020年底,基于KVM虚拟架构技术;主营提供香港CN2、美国洛杉矶CN2、日本CN2的相关VPS云主机业务。喜迎国庆香港上新首月五折不限新老用户,cera机房,线路好,机器稳,适合做站五折优惠码:gqceraus 续费七五折官方网站:https://www.ceraus.com香港云内存CPU硬盘流量宽带优惠价格购买地址香港云2G2核40G不限5Mbps24元/月点击购买...
racknerd怎么样?racknerd最近发布了一些便宜美国服务器促销,包括大硬盘服务器,提供120G SSD+192TB HDD,有AMD和Intel两个选择,默认32G内存,1Gbps带宽,每个月100TB流量,5个IP地址,月付$599。价格非常便宜,需要存储服务器的朋友可以关注一下。RackNerd主要经营美国圣何塞、洛杉矶、达拉斯、芝加哥、亚特兰大、新泽西机房基于KVM虚拟化的VPS、...
syntaxhighlighter为你推荐
Symbolbasiertefastreport2可現場列印的全自動單面和雙面印相機支持ipadipad连不上wifiiPad mini WiFi开关成灰色无法连接,怎么办ipad连不上wifi苹果ipad突然连不上网了,是怎么回事?网络是好的,手机能上网。勒索病毒win7补丁由于电脑没连接网络,所以成功躲过了勒索病毒,但最近要联网,要提前装什么补丁吗?我电脑断网好久了ipad上网为什么我的ipad 显示无法连接到网络win7telnetwindows7的TELNET服务在哪里开启啊360chromechrome是什么文件夹?是360急速浏览器吗?但是怎么没有卸载掉?icloudiphone苹果手机显示"已停用,连接itunes"是什么意思
免费com域名申请 plesk dreamhost 美国主机代购 godaddy支付宝 免费网站监控 监控宝 unsplash 服务器怎么绑定域名 网页背景图片 免费网络电视 韩国网名大全 蜗牛魔方 hostker ca187 美国凤凰城 免费asp空间 秒杀品 东莞主机托管 万网空间 更多