小牛电子书 > 其他电子书 > VB2008从入门到精通(PDF格式英文版) >

第88章

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

小说: VB2008从入门到精通(PDF格式英文版) 字数: 每页3500字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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)。 



lst。Insert(0; New MyType()) 



     This adds an element to the front of the list。 If you are adding elements at the beginning of  

the list or somewhere in the list; it is better to use the  LinkedList type; as it is more efficient。  

Using the class  List incurs an array copy resource penalty。 

     You can also add one list to another: 



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

Dim lstToBeAdded As List(Of MyType) 

lst。AddRange(lstToBeAdded) 

lst。InsertRange(0; lstToBeAdded) 



     The AddRange() method is used to append the list lstToBeAdded to lst。 The InsertRange()  

method inserts all of the elements in lstToBeAdded to the front of the list lst。 


…………………………………………………………Page 268……………………………………………………………

246       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  



                Delete an element from the list like this: 



           lst。Remove(existingMyType) 



                The Remove() method expects an instance of a type to remove from the list。  

                To delete a particular element at a particular index; use the following form。 



           lst。RemoveAt(0) 



                This code would remove the element at the front of the list。 



          Using a Key/Value Pair List 



          A key/value pair list is a list that has a cross…reference。 It is like a dictionary where you have  

          a word and associated meaning。 In puting terms; the word is a type and its definition is  

          another type。 The word is a key and the definition is a value。 A key/value pair definition would  

          be as follows; using the  IDictionary interface and Dictionary class。 



          Dim dictionary As IDictionary(Of String; Object) = _ 

            New Dictionary(Of String; Object)() 



               You could also use SortedDictionary; but that implies the elements within the list are sor

返回目录 上一页 下一页 回到顶部 2 2

你可能喜欢的