Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. if someone could help me identify the problem please. [modified]

if someone could help me identify the problem please. [modified]

Scheduled Pinned Locked Moved C#
helpdatabasewpf
14 Posts 7 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Luc Pattyn

    Aren't all strings "interned" in .NET, i.e. two strings holding the same value actually point to a single instance? [EDIT] No, they are not (see this little article[^]). However, string1==string2 and string.Equals(string1,string2) both call the string.Equals method and generate the correct result no matter what. [/EDIT] :)

    Luc Pattyn [Forum Guidelines] [My Articles]


    The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.


    modified on Friday, September 4, 2009 1:02 PM

    N Offline
    N Offline
    Nagy Vilmos
    wrote on last edited by
    #5

    head is bowed.


    Panic, Chaos, Destruction. My work here is done.

    1 Reply Last reply
    0
    • P PIEBALDconsult

      Where does it say that? Do you have proof? Why do people still believe this? :wtf: P.S. See: http://msdn.microsoft.com/en-us/library/system.string.op_equality(VS.71).aspx[^] " This operator is implemented using the Equals method, which means the comparands are tested for a combination of reference and value equality. The comparison is case-sensitive. " Therefore == == Equals !

      N Offline
      N Offline
      Nagy Vilmos
      wrote on last edited by
      #6

      I was sure that it was the case. I have just chickened and according to Troelsen, == and .equals both compare content. :-O I think it's wrong, but going by what Luc says below it makes some sort of sense. I have java as well as C#, there it is absolutly == comnpares references and .equals() compares values.


      Panic, Chaos, Destruction. My work here is done.

      P 1 Reply Last reply
      0
      • N Nagy Vilmos

        I was sure that it was the case. I have just chickened and according to Troelsen, == and .equals both compare content. :-O I think it's wrong, but going by what Luc says below it makes some sort of sense. I have java as well as C#, there it is absolutly == comnpares references and .equals() compares values.


        Panic, Chaos, Destruction. My work here is done.

        P Offline
        P Offline
        PIEBALDconsult
        wrote on last edited by
        #7

        Well .net is better than Java. (duh!) :-D

        1 Reply Last reply
        0
        • D DinoRondelly

          Here is my Code

          using System;
          using System.Collections.Generic;
          using System.Text;
          using System.IO;
          using System.Data.Odbc;
          using My;
          using System.Data;

          namespace FirstCitizensBank_DropOffReport
          {
          class Program : MyGeneral
          {
          public static string dataBasePath;
          public static string dbname;
          public static string strconn;
          static void Main(string[] args)
          {
          StartUp("", "", true);
          dataBasePath = ConfigPath + "Empathic\\FirstCit\\";
          dbname = "Bank";
          strconn = "";

                  try
                  {
                      string repname = dataBasePath + "Reports\\\\Dropoff" + myDate.ToString("yyyyMMdd") + ".xls";
          
                      DateTime enddate = myDate.AddDays(-myDate.Day);
                      DateTime startdate = enddate.AddDays(1).AddMonths(-1);
                      MyWriteExcel exl = new MyWriteExcel(repname, dataBasePath + "Reports\\\\Templates\\\\DropoffTemp.xls");
          
                      //dbname = dbname + myDate.ToString("yyMM");
                      //WriteMonth(ref exl, startdate, enddate, "B");
          
                      enddate = startdate.AddDays(-1);
                      //startdate = startdate.AddMonths(-1);
                      dbname = "Bank";
                      dbname = dbname + myDate.AddMonths(-1).ToString("yyMM");
                      WriteMonth(ref exl, startdate, enddate, "C");
          
                      enddate = startdate.AddDays(-1);
                      startdate = startdate.AddMonths(-2);
                      dbname = "Bank";
                      dbname = dbname + myDate.AddMonths(-2).ToString("yyMM");
                      WriteMonth(ref exl, startdate, enddate, "D");
          
                      exl.Save();
                      exl.Close();
          
                      MyEmail email = new MyEmail("", "First Citizens Bank Dropoff Report", "Please see attached report");
                      email.AddAttachment(repname);
                      email.AddBCC(CommonEmail);
                      email.sendEmail();
          
                      endProgram();
                  }
                  catch (Exception e)
                  {
                      WriteToLog("@Failed: " + e.ToString());
          
                      HelpPage(e.ToString(), "Failed");
                  }
          
              }
          
              public static void WriteMonth(ref MyWriteExcel exl, DateTime startdate, DateTime enddate, string column)
              {
                  string sql = "select count(\*) as total, sum(iif(mid(CALLSTATUS, 1, 2) >= '06', 1, 0)) as entered, sum(iif(DONE is not null, 1, 0)) as completed"
                          + " from " + dbname + " where startdate
          
          P Offline
          P Offline
          PIEBALDconsult
          wrote on last edited by
          #8

          Dunno, step through it with the debugger and see what's actually happening.

          1 Reply Last reply
          0
          • N Nagy Vilmos

            whwen comparing two strings, you should use the

            s1.Equals(s2)

            . The code s1 == s2 just returns true if they are the same object not the same value.


            Panic, Chaos, Destruction. My work here is done.

            A Offline
            A Offline
            Adam R Harris
            wrote on last edited by
            #9

            Ummm .... they both work. Case in point;

                static void Main(string\[\] args)
                {
                    string strTest1 = "This is a test";
                    string strTest2 = "This is a second test";
            
                    Console.WriteLine("strTest1 == strTest2 : {0}", strTest1 == strTest2);
                    Console.WriteLine("strTest1 == \\"This is a test\\" : {0}", strTest1 == "This is a test");
                    Console.WriteLine("strTest1.Equals(strTest2) : {0}", strTest1.Equals(strTest2));
                    Console.WriteLine("strTest1.Equals(\\"This is a test\\") : {0}", strTest1.Equals("This is a test"));
                    Console.ReadLine();
               }
            

            output

            strTest1 == strTest2 : False
            strTest1 == "This is a test" : True
            strTest1.Equals(strTest2) : False
            strTest1.Equals("This is a test") : True

            If at first you don't succeed ... post it on The Code Project and Pray.

            1 Reply Last reply
            0
            • D DinoRondelly

              Here is my Code

              using System;
              using System.Collections.Generic;
              using System.Text;
              using System.IO;
              using System.Data.Odbc;
              using My;
              using System.Data;

              namespace FirstCitizensBank_DropOffReport
              {
              class Program : MyGeneral
              {
              public static string dataBasePath;
              public static string dbname;
              public static string strconn;
              static void Main(string[] args)
              {
              StartUp("", "", true);
              dataBasePath = ConfigPath + "Empathic\\FirstCit\\";
              dbname = "Bank";
              strconn = "";

                      try
                      {
                          string repname = dataBasePath + "Reports\\\\Dropoff" + myDate.ToString("yyyyMMdd") + ".xls";
              
                          DateTime enddate = myDate.AddDays(-myDate.Day);
                          DateTime startdate = enddate.AddDays(1).AddMonths(-1);
                          MyWriteExcel exl = new MyWriteExcel(repname, dataBasePath + "Reports\\\\Templates\\\\DropoffTemp.xls");
              
                          //dbname = dbname + myDate.ToString("yyMM");
                          //WriteMonth(ref exl, startdate, enddate, "B");
              
                          enddate = startdate.AddDays(-1);
                          //startdate = startdate.AddMonths(-1);
                          dbname = "Bank";
                          dbname = dbname + myDate.AddMonths(-1).ToString("yyMM");
                          WriteMonth(ref exl, startdate, enddate, "C");
              
                          enddate = startdate.AddDays(-1);
                          startdate = startdate.AddMonths(-2);
                          dbname = "Bank";
                          dbname = dbname + myDate.AddMonths(-2).ToString("yyMM");
                          WriteMonth(ref exl, startdate, enddate, "D");
              
                          exl.Save();
                          exl.Close();
              
                          MyEmail email = new MyEmail("", "First Citizens Bank Dropoff Report", "Please see attached report");
                          email.AddAttachment(repname);
                          email.AddBCC(CommonEmail);
                          email.sendEmail();
              
                          endProgram();
                      }
                      catch (Exception e)
                      {
                          WriteToLog("@Failed: " + e.ToString());
              
                          HelpPage(e.ToString(), "Failed");
                      }
              
                  }
              
                  public static void WriteMonth(ref MyWriteExcel exl, DateTime startdate, DateTime enddate, string column)
                  {
                      string sql = "select count(\*) as total, sum(iif(mid(CALLSTATUS, 1, 2) >= '06', 1, 0)) as entered, sum(iif(DONE is not null, 1, 0)) as completed"
                              + " from " + dbname + " where startdate
              
              D Offline
              D Offline
              DinoRondelly
              wrote on last edited by
              #10

              I have solved this problem and appreciate all the reply's. The problem was that if a call status came back that wasn't in one of my if statements the program was defaulting to the last line number used since i am not increamenting line numbers. I am sure this is a rookie mistake and i thank you.

              P 1 Reply Last reply
              0
              • P PIEBALDconsult

                Where does it say that? Do you have proof? Why do people still believe this? :wtf: P.S. See: http://msdn.microsoft.com/en-us/library/system.string.op_equality(VS.71).aspx[^] " This operator is implemented using the Equals method, which means the comparands are tested for a combination of reference and value equality. The comparison is case-sensitive. " Therefore == == Equals !

                L Offline
                L Offline
                LetMeFinclOut
                wrote on last edited by
                #11

                PIEBALDconsult wrote:

                Therefore == == Equals !

                :cool:

                1 Reply Last reply
                0
                • D DinoRondelly

                  I have solved this problem and appreciate all the reply's. The problem was that if a call status came back that wasn't in one of my if statements the program was defaulting to the last line number used since i am not increamenting line numbers. I am sure this is a rookie mistake and i thank you.

                  P Offline
                  P Offline
                  PIEBALDconsult
                  wrote on last edited by
                  #12

                  Yeah, see? Use a switch instead.

                  1 Reply Last reply
                  0
                  • L Luc Pattyn

                    Aren't all strings "interned" in .NET, i.e. two strings holding the same value actually point to a single instance? [EDIT] No, they are not (see this little article[^]). However, string1==string2 and string.Equals(string1,string2) both call the string.Equals method and generate the correct result no matter what. [/EDIT] :)

                    Luc Pattyn [Forum Guidelines] [My Articles]


                    The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.


                    modified on Friday, September 4, 2009 1:02 PM

                    C Offline
                    C Offline
                    Curtis Schlak
                    wrote on last edited by
                    #13

                    Depending on your point of view, fortunately or unfortunately, not all strings in the CLI are interned. Essentially, any string loaded with the MSIL ldstr command is interned, and anything programatically interned is interned. For example, if we run the following code

                    string interned1 = "hello";
                    string interned2 = "hello";
                    string notinterned = new String("hello".ToCharArray());
                    string interned4 = string.Intern(notinterned);
                    Console.WriteLine(RuntimeHelpers.GetHashCode(interned1));
                    Console.WriteLine(RuntimeHelpers.GetHashCode(interned2));
                    Console.WriteLine(RuntimeHelpers.GetHashCode(notinterned));
                    Console.WriteLine(RuntimeHelpers.GetHashCode(interned4));

                    then we get the corresponding output

                    58225482
                    58225482
                    54267293
                    58225482

                    As you can see from the output, the interned strings all show the same "memory location" while the programatically constructed string shows a different location. (.NET 3.5) In terms of string equality, though, the override of operator== calls the public static string.Equals(string, string) method which calls a private static method to determine equality. string.Equals(string) calls the private static method directly.

                    "we must lose precision to make significant statements about complex systems." -deKorvin on uncertainty

                    1 Reply Last reply
                    0
                    • N Nagy Vilmos

                      whwen comparing two strings, you should use the

                      s1.Equals(s2)

                      . The code s1 == s2 just returns true if they are the same object not the same value.


                      Panic, Chaos, Destruction. My work here is done.

                      L Offline
                      L Offline
                      Luc Pattyn
                      wrote on last edited by
                      #14

                      Hi Nagy,

                      Nagy Vilmos wrote:

                      s1 == s2 just returns true if they are the same object

                      as others already told you, this is completely wrong. I did some investigation, triggered both by this thread and by the lean-and-mean competition, and that resulted in this little article of mine[^]. :)

                      Luc Pattyn

                      :badger: :jig: :badger:

                      Have a look at my entry for the lean-and-mean competition; please provide comments, feedback, discussion, and don’t forget to vote for it! Thank you.

                      :jig: :badger: :jig:

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups