友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VB2008从入门到精通(PDF格式英文版)-第117章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




   Return (tax * amount) + amount 

End Function 



     Notice a return type of Double is declared in the generated code。 The piler did this by  

inferring from the code。 

     Single…expression lambda expressions have some use; but their real value is in the ability  

to create a closure that establishes a context。 A closure holds the evaluated lambda expression  

with its bound variables for other functions to use; which is how the context is established。 

     Let’s say that we are going to calculate the sales tax for a particular place like Quebec;  

Canada。 The sales tax there is 15%; and thus when using the lambda expression; we abstract  

and create code similar to the following。 



Console。WriteLine(〃Tax (〃 & calculate(SalesTax。Quebec; 100。0) & 〃)〃) 



     The value for the sales tax is held in the property SalesTax。Quebec; and whenever we use  

the lambda expression; we need to specify the property。  

     With lambda expressions and closure; you have the ability to save a context。 For starters;  

let’s redefine the lambda expression to have only a single parameter: 



Function(amount As Double) (tax * amount) + amount 


…………………………………………………………Page 266……………………………………………………………

244       CH AP T E R   9   ■    L E A R N IN G   AB OU T   L I ST S;   D E L E G A T E S;   A N D   L A M B DA   E X P R E S SI ON S  



                Notice that the lambda expression still uses the tax rate in its calculation。 This is where context  

           es in。 We can save the context of a certain tax rate and then use the lambda expression in that  

           context。 To do so; we need a lambda expression that returns our new one…parameter lambda  

           expression: 



           Function(tax As Double) Function(amount As Double) (tax * amount) + amount 



                We can set the tax rate with the first lambda expression; and then call the second to calcu

          late the tax: 



           Dim prepareTax = 

            Function(tax As Double) Function(amount As Double) (tax * amount) + amount 



           Dim doQuebec = prepareTax(0。1) 

           Console。WriteLine(doQuebec(100)) 



                The call to prepareTax defines doQuebec as prepareTax(0。1) and sets the tax variable in the  

           context of doQuebec。 Now when we call doQuebec; we can calculate the total amount without  

           ever needing to specify the tax rate again。 

                Lambda expressions allow only a single expression。 If you want to implement a lambda  

           expression that should make a decision; you have a problem。 To solve this problem; you can  

          use an If statement variation that is like a function。 Imagine a country where the applicable  

           sales tax depends on the amount you purchased。 This logic could be implemented using a  

           closure and ternary If statement; as follows: 



           Dim setMinimumSalesTax = Function(minimumSalesTax As Double) 

                             Function(amount As Double) 

                                 If(amount 》 minimumSalesTax; 

                                    (0。15 * amount) + amount;_ 

                                    (0。1 * amount) + amount) 



           Dim calculateTotal = setMinimumSalesTax(100) 



           Console。WriteLine(calculateTotal(80)) 

           Console。WriteLine(calculateTotal(500)) 



                The ternary  If is a function that has three parameters。 The first parameter is the expres

           sion you want to test。 Typically; whatever you would write in a regular If block; you would  

          write as the first parameter。 In the example; it is a test of whether or not the bought amount  

          is greater than a minimum amount。 The second parameter is an expression that is executed  

          whenever the first parameter results in a True value。 The third parameter executes if the first  

          parameter results in a False value。 

                Another variation of the  If function is a two…parameter version that can be used to test  

          whether or not an object has a value of  Nothing; as follows: 



           Dim cleanUpList = Function(defaultObject As Object)_ 

                                Function(objToTest As Object) If(objToTest; defaultObject) 


…………………………………………………………Page 267……………………………………………………………

                  C HA P TE R   9   ■    L E AR N I N G   A B O U T  L I ST S;   DE L E G AT E S ;   AN D  L A M B D A  E X PR E SSI O N S  245 



     The implementation of the lambda expression has an  If with two parameters。 The first  

parameter is the object to test for Nothing; and the second parameter represents the expression  

to execute if the object is Nothing。  



Learning More About Collection Types 



In the beginning of this chapter; I talked about the different collection types; but not how to use  

them。 This section presents examples of using the types。 



Using a Plain…Vanilla List 



A plain…vanilla list is a list of specific types such as  Integer; Double; or some other object type。  

Instantiate the list as follows: 



Dim lst As List(Of MyType) = New List(Of MyType)() 



     The default type  List is used for most of your coding situations; but if you are adding and  

removing elements frequently; the following code is better。 



Dim lst As IList(Of MyType) = New LinkedList(Of MyType)() 



     The type  LinkedList implements the logic that was presented in the previous chapter;  

whereas  List manipulates a fixed…length array。  LinkedList has a downside in that it does not  

support the IList interface; and the sample code will not pile。 Thus; to make the code  

work; you would need to use  ICollection: 



Dim lst As ICollection(Of MyType) = New LinkedList(Of MyType)() 



     Add an element to  IList as follows: 



lst。Add(New MyType()) 



     To add elements to your list according to an order; use the following form (note that  

ICollection doesn’t have this method)。
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!