This is a relatively large project, but I'll try to put all necessary things here.   /**  Removes the record with Key k from the dictionary. It throws a      DictionaryException if the record is not in the dictionary. */  public void remove(Key k) throws DictionaryException{          deleteNode = findNode(k);         if (deleteNode == null) throw new DictionaryException("Error: Record doesn't exist in the dictionary!");         else{             //check if children are leafs             if(deleteNode.getLeftChild() == null || deleteNode.getRightChild() == null)                 //set it to itself                 replace = deleteNode;             else                 //otherwise replace with successorNode                 replace = successorNode(deleteNode);             //store left child if it exists             if (replace.getLeftChild() != null)                 child = replace.getLeftChild();             //else, store right             else                 child = replace.getRightChild();             //check if both nodes are null             if (child != null)                  child.setParent(replace.getParent());             //else replace the node that needs to be deleted             else{                 //replace left child of parent                 if(replace == replace.getParent().getLeftChild())                      replace.getParent().setLeftChild(child);                 //else replace right                 else                     replace.getParent().setRightChild(child);             }                //store information of the replacing node, within the deleteNode             if (replace != deleteNode)                  deleteNode.setRoot(replace.getRecord());         }     }   This method has an null-pointer error on the parent stuff. I'm not sure how to go about dealing with it.  This is an Ordered Dictionary stored in a BST. Nodes consist of Records which consist of (Key,data) where Key is (name,type). Essentially a Record is ((name,type),data).  I can provide more information if necessary. I've been stuck here for a quite while any help is appreciated!
129
What are Null Pointer Exceptions (java.lang.NullPointerException) and what causes them?  What methods/tools can be used to determine the cause so that you stop the exception from causing the program to terminate prematurely?
12521
What are the best practices to consider when catching exceptions and re-throwing them? I want to make sure that the Exception object's InnerException and stack trace are preserved. Is there a difference between the following code blocks in the way they handle this?  try {     //some code } catch (Exception ex) {     throw ex; }   Vs:  try {     //some code } catch {     throw; }
31102
The example below throws an InvalidOperationException, "Collection was modified; enumeration operation may not execute." when executing the code.   var urls = new List&lt;string&gt;(); urls.Add("http://www.google.com");  foreach (string url in urls) {     // Get all links from the url     List&lt;string&gt; newUrls = GetLinks(url);      urls.AddRange(newUrls); // &lt;-- This is really the problematic row, adding values to the collection I'm looping }   How can I rewrite this in a better way? I'm guessing a recursive solution?
87503
I always read that it is recommended to set objects to nothing, once I am done with them. But I normally use them only in functions inside forms.  Isn't the reference lost and memory released when the function scope is left, regardless of setting objects to Nothing?   i.e. is it really necessary to do:  Set db = Nothing Set record_set = Nothing
117196
I was at an interview for a C position in which they presented me with an idiom that I haven't previously encountered. This is a trick that simplifies implementation of various algorithms involving linked lists and I'm wondering if anybody else has encountered this.  Say we have a linked list record defined so:  typedef struct _record {     char* value;     struct _record* next; } record;   We need a function that inserts a new record so that the entire list remains sorted with respect to the value's in the records. The following implementation is simpler than anything I would have used, albeit less readable.  void insert_sorted(record** r, const char* value) {     record* newrec = NULL;     while(*r &amp;&amp; strcmp(value, (*r)-&gt;value) &gt; 0)         r = &amp;((*r)-&gt;next); /* move r to point to the next field of the record */     newrec = malloc(sizeof(record));     newrec-&gt;value = strdup(value);     newrec-&gt;next = *r;     *r = newrec; }   When the function is called, r points to the head pointer of the list. During the while loop, r is updated to point to the next field of the record that comes just before the point where we want to put the new record in. The last line of the function either updates the head pointer of the list (if the insertion happens at the beginning) or the next field of the previous record, which is quite cool.  A couple of questions:   Does this idiom have a name or is it mentioned in any literature? Are there others like it in the C language?   I thought I knew C pretty well and had pointers and indirection pretty well figured out, but this one took me a while to fully understand.
115340
Is it possible to "wipe" strings in Delphi? Let me explain:  I am writing an application that will include a DLL to authorise users. It will read an encrypted file into an XML DOM, use the information there, and then release the DOM.  It is obvious that the unencrypted XML is still sitting in the memory of the DLL, and therefore vulnerable to examination. Now, I'm not going to go overboard in protecting this - the user could create another DLL - but I'd like to take a basic step to preventing user names from sitting in memory for ages. However, I don't think I can easily wipe the memory anyway because of references. If I traverse my DOM (which is a TNativeXML class) and find every string instance and then make it into something like "aaaaa", then will it not actually assign the new string pointer to the DOM reference, and then leave the old string sitting there in memory awaiting re-allocation? Is there a way to be sure I am killing the only and original copy?  Or is there in D2007 a means to tell it to wipe all unused memory from the heap? So I could release the DOM, and then tell it to wipe.   Or should I just get on with my next task and forget this because it is really not worth bothering.
24554
I have a lookup relationship.  If I just do the following query it works fine:  Sobject c = [select field__r.fieldchild__c from custom_obj where Id = :someId]; system.debug('c:' + c);   However with the following I get an error:  Sobject c = [select field__r.fieldchild__c from custom_obj where Id = :someId]; String c2 = (String) r.getSobject('field__r').get('fieldchild__c');   Error message:     FATAL_ERROR System.NullPointerException: Attempt to de-reference a   null object
53384
If I want to use objects as the keys for a Dictionary, what methods will I need to override to make them compare in a specific way?  Say I have a a class which has properties:  class Foo {     public string Name { get; set; }     public int FooID { get; set; }      // elided }    And I want to create a:  Dictionary&lt;Foo, List&lt;Stuff&gt;&gt;   I want Foo objects with the same FooID to be considered the same group.  Which methods will I need to override in the Foo class?  To summarize: I want to categorize Stuff objects into lists, grouped by Foo objects. Stuff objects will have a FooID to link them to their category.
3140
The following code should find the appropriate project tag and remove it from the XmlDocument, however when I test it, it says:  The node to be removed is not a child of this node.  Does anyone know the proper way to do this?  public void DeleteProject (string projectName) {     string ccConfigPath = ConfigurationManager.AppSettings["ConfigPath"];      XmlDocument configDoc = new XmlDocument();      configDoc.Load(ccConfigPath);      XmlNodeList projectNodes = configDoc.GetElementsByTagName("project");      for (int i = 0; i &lt; projectNodes.Count; i++)     {         if (projectNodes[i].Attributes["name"] != null)         {             if (projectName == projectNodes[i].Attributes["name"].InnerText)             {                                                                 configDoc.RemoveChild(projectNodes[i]);                 configDoc.Save(ccConfigPath);             }         }     } }   UPDATE  Fixed. I did two things:  XmlNode project = configDoc.SelectSingleNode("//project[@name='" + projectName + "']");   Replaced the For loop with an XPath query, which wasn't for fixing it, just because it was a better approach.  The actual fix was:  project.ParentNode.RemoveChild(project);   Thanks Pat and Chuck for this suggestion.
4676
Assume a table structure of MyTable(KEY, datafield1, datafield2...).  Often I want to either update an existing record, or insert a new record if it doesn't exist.  Essentially:  IF (key exists)   run update command ELSE   run insert command   What's the best performing way to write this?
23661
Context Around this Code: I am making a schedulable class run each Sunday to track a couple of metrics important to the team.   Question: I am looking to consolidate DML operations and a big part of this is understanding pass by reference vs pass by value.  I want to pass the salesOps user object to the method SDREfficiencyLastWeek. I made the return type void, because I figured that I will be passing this by reference and I can make all the updates in the method without having to anything.   Why I am confused:    I read the above article and am thrown off by the following statement:  "Non-primitive data type arguments, such as sObjects, are also passed into methods by value. "   If the object is indeed passed by reference, then the query for the salesOps user in my code should be sufficient enough to edit all fields on that object without actually having to state each field in the query.  global class SDREfficientMetricsSchedulable implements Schedulable  {     global void execute(SchedulableContext sc)      {         User salesOps = [SELECT ID FROM USER WHERE id = '0056A000002Z3p9QAC'];         List&lt;String&gt; queries = new List&lt;String&gt;();          String contactsWorked_lastWeek  = 'select count(id) results from contact where LastActivityDate = last_week';         queries.add(contactsWorked_lastWeek);          String demosSet_lastWeek            = 'select count(id) results from form__c where CreatedDate = last_week';         queries.add(demosSet_lastWeek);          String demosCompleted_lastWeek  = 'select count(id) results from opportunity where (stagename = \'Unqualified Demo Completed\'  OR stagename = \'Qualified Demo Completed\' )  and RecordTypeId = \'0126A000000yudDQAQ\' and CloseDate = last_week';         queries.add(demosCompleted_lastWeek);          String qualifiedDemos_lastWeek  = 'select count(id) results  from opportunity where RecordTypeId = \'0126A0000004Ao6QAE\' and isclosed = false and  SDR_Owner__c != null and CreatedDate = last_week';         queries.add(qualifiedDemos_lastWeek);          String closedWon_lastWeek       = 'select count(id) results  from opportunity where RecordTypeId = \'0126A0000004Ao6QAE\' and iswon = true and  SDR_Owner__c != null and CloseDate = last_week';         queries.add(qualifiedDemos_lastWeek);            SDREfficiencyLastWeek(queries, salesOps);          update salesOps;     }       public void SDREfficiencyLastWeek(List&lt;String&gt; queries, User salesOps )     {        }  }
121895
I have a trigger and a class that seem to be causing an insert fail in Dataloader.  I am trying to insert 200 records to see if an error is generated before moving these to production. I'm just inserting the mandatory fields such as Name, Owner, Market, Customer_Success_Manager__c, and Business Unit.   Each time I get an error:     UpdateCSMTeam:execution of AfterInsertcaused by: System.DmlException:   Insert failed. First exception on row 0 with id01MJ0000009gXthMAE;   first error: INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an   insert call: [Id]Class.UpdateCSM.updateTeamMem . I've listed the class   and trigger below.   APEX CLASS  public class UpdateCSM {             public static void updateTeamMember(List&lt;Account&gt; accounts) {                     List&lt;AccountShare&gt; ashareLIST = new List&lt;AccountShare&gt;();                     List&lt;AccountTeamMember&gt; ATM = new List&lt;AccountTeamMember&gt;();                    Set&lt;String&gt; rmMember = new Set&lt;String&gt;();                     Map&lt;ID, ID&gt; acctToBRepMap = new Map&lt;ID, ID&gt;();                      for(Account a:accounts){                              AccountShare caSharingRule = new AccountShare();                                caSharingRule.AccountId = a.Id;                                caSharingRule.OpportunityAccessLevel = 'Edit';                                caSharingRule.CaseAccessLevel = 'Edit';                                caSharingRule.AccountAccessLevel = 'Edit';                                caSharingRule.UserOrGroupId = a.Customer_Success_Manager__c;                                ashareLIST.add(caSharingRule);                                    if(a.Customer_Success_Manager__c!= null){                                   AccountTeamMember Teammemberad=new AccountTeamMember();                 Teammemberad.AccountId=a.id;                 Teammemberad.UserId=a.Customer_Success_Manager__c;                 Teammemberad.TeamMemberRole = 'Customer Success Manager';                                   ATM.add(Teammemberad);                             if(!ATM.isEmpty()){                                    insert ATM;                                              insert ashareLIST;                                                         if(a.Customer_Success_Manager__c==null){                                            list&lt;AccountTeamMember&gt; ratm = [SELECT UserId                                                                             FROM AccountTeamMember                                                                             WHERE (TeamMemberRole = 'Customer Success Manager')                                                          AND AccountId =:a.id];                                             if(ratm.size()&gt;0)                                                 delete ratm;                                        }                                    }                                 }                            }                         }                    } ...   APEX TRIGGER  trigger UpdateCSMTeam on Account (After update, After insert){         UpdateCSM.updateTeamMember(trigger.new); }
10314
The indexer into Dictionary throws an exception if the key is missing.  Is there an implementation of IDictionary that instead will return default(T)? I know about the TryGetValue() method, but that's impossible to use with LINQ. Would this efficiently do what I need?: myDict.FirstOrDefault(a =&gt; a.Key == someKeyKalue);  I don't think it will as I think it will iterate the keys instead of using a Hash lookup.
76988
To query a single record we have below two approach :  Approach 1. Assign record to a single Account variable as shown below:  Account accountToGet = [SELECT Name From Account where name = 'UniqueAccount' LIMIT 1];   With above line, it throws below error if no record founds : System.QueryException: List has no rows for assignment to SObject  Approach 2. Assign single record to a List variable as mention below :   List&lt;Account&gt; lstAccount = [SELECT Name From Account where name = 'Unknown Account'];    Even if SOQL returns no records, above line doesn't throws an error. We can use below line to avoid NULL errors.  if(!lstAccount.IsEmpty())     System.debug('No Error');   To handle NULL exception in Approach 1, we need to handle NULL exception in try....catch. It looks like an approach where we will error to occur and then handle it in try....catch.  With Approach 2, we can avoid exception to occur and without using try..catch.. also the code will work.  Based on above approaches, I think approach 2 is fine to prevent errors. Can anyone give me suggestion that why should not we use approach 2?
70260
I have a bunch of objects in a flat structure. These objects have an ID and a ParentID property so they can be arranged in trees. They are in no particular order. Each ParentID property does not necessarily matches with an ID in the structure. Therefore their could be several trees emerging from these objects.  How would you process these objects to create the resulting trees ?   I'm not so far from a solution but I'm sure it is far from optimal...  I need to create these trees to then insert Data into a database, in proper order.  There are no circular references. A Node is a RootNode when ParentID == null or when ParentID can't be found in the other objects
53881
When I have a class I believe I no longer use, I usually attempt to delete it and see if there is an error. This strikes me as one of those things that just must be wrong...but I don't see another way. Can someone tell me what I must obviously be missing? :(
39591
I have nested dictionaries:  {'key0': {'attrs': {'entity': 'p', 'hash': '34nj3h43b4n3', 'id': '4130'},           u'key1': {'attrs': {'entity': 'r',                               'hash': '34njasd3h43b4n3',                               'id': '4130-1'},                     u'key2': {'attrs': {'entity': 'c',                                         'hash': '34njasd3h43bdsfsd4n3',                                         'id': '4130-1-1'}}},           u'key3': {'attrs': {'entity': 'r',                               'hash': '34njasasasd3h43b4n3',                               'id': '4130-2'},                     u'key4': {'attrs': {'entity': 'c',                                         'hash': '34njawersd3h43bdsfsd4n3',                                         'id': '4130-2-1'}},                     u'key5': {'attrs': {'entity': 'c',                                         'hash': '34njawersd3h43bdsfsd4n3',                                         'id': '4130-2-2'}}}},  'someohterthing': 'someothervalue',  'something': 'somevalue'}   given an id  - one of all the ids like 4130 to 4130-2-2.                       whats the easiest way to navigate to the correct dictionary?  Like if the given id is 4130-2-1 then it should reach the dictionary with key=key5  non xml approaches please.  Edit(1): The nesting is between 1 to 4 levels, but I know the nesting before I parse.  Edit(2): Fixed the code.  **Edit(3):**Fixed code again for string values of ids. Please excuse for the confusion created. This is final I hope :)