Nothing Equals String.Empty, Null Does Not Equal String.Empty?
Jun 28, 2010
This must've have been asked before but I couldn't locate it. In a mixed code project (VB and C#) we were debugging some old Visual Basic code where a statement as follows could be found:
If Request.Params("xxx") <> "" Then
'do something
I considered this a bug as Request.Params could be null, in which case the statement would've become false which wasn't the idea. So I thought. I just found out, -- probably for the tenth time and I will keep forgetting -- that the following two statements are not equal, while Nothing in VB should be equal to null in C# (thought I):
if(String.Empty == null) // always false
If String.Empty = Nothing Then ' always true
Should I dismiss this as a typical Microsoft backward compatibility effort, or should I consider this a huge error in the VB.NET compiler? Does anybody know the Microsoftean opinion on this oddity?
Why does the first if statement evaluate to true? I know if I use "is" instead of "=" then it won't evaluate to true. If I replace String.Empty with "Foo" it doesn't evaluate to true. Both String.Empty and "Foo" have the same type of String, so why does one evaluate to true and the other doesn't?
//this evaluates to true If Nothing = String.Empty Then
I'm using FileHelper to generate object's property. Here is an example of one property:
<FieldOptional(), _ FieldTrim(TrimMode.Both)> _ <FieldNullValue(GetType(String), " ")> _ Public StoreNo As String
As you can see the StoreNo will either have a value or " ", one of the business policy is to check if the StoreNo is empty or nothing if the object's StoreNo is empty or null then the record will not create.
I though about creating an HasValue Function in the class to check the StoreNo and other properties in the object but I feel like it is a hack.
Public Function HasValue() As Boolean Dim _HasValue As Boolean = True If StringHelper.IsNullOrBlank(Me.StoreNo) Then
[Code]....
I don't think this approach is an ideal solution. what if the StoreNo is remove or change to something else. What's the best approach to check object's property?
I have a couple of textfields in a Windows form. One of these textfields is allowed to be NULL. When I enter a value for every field, it is all inserted, no problem. When I leave the field (txtGewicht) blank, I can't seem to be able to insert NULL in Access Database.
If Double.TryParse(txtGewicht.Text, 0) Then klant.Gewicht = Double.Parse(txtGewicht.Text) Else
[Code]....
This is what I get:
"Cannot set column 'Gewicht' to NULL, please use DBNull instead"
So I changed 'Nothing' to DBNull.value, but it then tells me that System.DBNull cannot be converted to type Double.
I need to sort a DataTable or DataGridView by a column that is a string value, but with null/empty values at the BOTTOM when sorting ASCENDING. The DataTable is NOT populated by a SQL statement, so no order by. If I do
Now I can't use cmbReplcmnt.Text because what I actually need is the value of that SelectedItem
So problem is, if the user leaves the combobox as blank, it throws a null exception.I decided to use the IIf function then:classEquipmentItem.ReplacementTo = IIf(IsNothing(cmbReplcmnt.SelectedItem.ToString), classEquipmentItem.ReplacementTo = "", cmbReplcmnt.SelectedItem.ToString)
Unfortunately I still get the error I tried using a Try-Catch for it and it worked, but I don't want to rely on the Try-Catch, so I was wondering is there a another way to work this through?
I need to sort a DataTable or DataGridView by a column that is a string value, but with null/empty values at the BOTTOM when sorting ASCENDING.The DataTable is NOT populated by a SQL statement, so no order by.If I doDataGridView1.Sort(New RowComparer(System.ComponentModel.ListSortDirection.Ascending))then it throws an exception, saying that the DataGridView is DataBound, which is correct, but doesn't help me, and I want to keep it databound.
I was trying to call a method using Reflection on a method that has a STRING parameter.However a STRING does not have a parameterless constructor.So instead of something like.>>
Option Strict On Option Explicit On Option Infer Off Public Class Form1
i have a string array that i want to output to a text file. the array size is 10000. i fill the array starting from 0 with some strings. at the end, i only want to show the array from index 256 to the last array that is not empty (for eg. if the array is filled with data from 0 to 2000, i only want the text file to show the data from 256 to 2000 and ignore the remaining strings). Is there any function to do this?t i use is shown below
Dim myArray(10000) as string Dim strArray As New System.IO.StreamWriter("c:List.txt") strArray.WriteLine("{0,10}{1,30}", "Index", "Symbol")
i have a string array that i want to output to a text file. the array size is 10000. i fill the array starting from 0 with some strings. at the end, i only want to show the array from index 256 to the last array that is not empty (for eg. if the array is filled with data from 0 to 2000, i only want the text file to show the data from 256 to 2000 and ignore the remaining strings). Is there any function to do this? i am using visual basic express 2008. The code that i use is shown below
I have a nullable database field of type varchar. I am writing a unit test for a service method that retrieves the value of this field. The service method uses a custom DAL that returns a value of String.Empty if the database field is Null (this is desired behaviour).
just found out that replace(string does not do the same as string.replace when my string variable was an empty str the first one returns "nothing" and the second returns an empty string (as expected).just sloppy coding anyhow, it was a function that was converted from classic asp and never rewritten properly. [code]
I have a webpage that has a Telerik RadComboBox on the page. One of the properties of this ComboBox is EmptyMessage, which fills the combobox with a message when an item is not selected. I am binding my combobox to a datasource at runtime and for some reason, it wipes this EmptyMessage away. Is there a way to keep my data items in tact and have the empty message there too?
I'm using VB's StringBuilder, and I was curious what is considered "best practice" for emptying the builder/setting it to a new string. Would it be something like this:[code]or is there a "Better" way?
Possible Duplicate: In C#, should I use string.Empty or String.Empty or "" ? I just don't understand the benefits of using String.Empty over "". Aside it being strongly typed its longer.
With that said, shall the Private Property Attributes() As String() not return the values of DirectoryAttribute placed over the interfaces properties as well, since I specify True in the inheritance parameter of the Type.GetCustomAttributes method?
In my EF4 EntityModel I have an entity named Users. Users have the common UserName and Password string fields. If I do something like this
Dim u as new USERS U.UserName = String.Empty Then U.UserName are still Nothing.
But if I Do Something like this Dim u as new USERS u.UserName = "A" u.UserName = String.Empty Then U.UserName take String.Empty as value without problem.
The reason is the way that EF4 generate the UserName Property Public Property UserName() As Global.System.String Get Return _UserName End Get [Code] .....
I do not want to make two assignations every time I want to set string.empty to a property with a nothing value, and I do not want to remember that I must do it in this way everytime, because I'm pretty sure that I will forget it and then I will introduce bugs in the code. I just want to assign the empty.string value to a property and the property take "" as value.
I'm sure this is simple to do but I'm struggling to get this work, I've tried using convert.tostring, decimal.tostring, ctype(object, type) and cstr(object) but without success. I guess I'm trying to change the decial object to a string object and then assign it a value of empty string but always get type mismatch error.[code]
In my program i have it send an email and it send the email but after it sends i get this error "The parameter 'addresses' cannot be an empty string. Parameter name: addresses". I don't know why.
To make it clear this IS homework, however this is also a method of research. i only ask when i get in binds i can not find answers to in other forums . There are so many i could spend more time[code]...
I always initialize my variables with a value when declaring them.I was wondering if using String.Empty to initialize a variable is correct.'Is this OK ?
Dim strValue As String = String.Empty 'I used to do Dim strValue2 As String = "" On the same subject.
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Integer, ByVal lpFileName As String) As Integer Dim value As String = "" Dim length As Integer Dim IniFileName As String
but value contains an empty string I confes to being a VB n00b, less than a week, in fact, but I can't see what's wrong there. The file exists, it contains a section called "Config" which has an entry called "UserName" with a value - but even if not, wouldn't value take the default?
Edit: It's not returning an empty string - it's returning whatever I initialize value to before calling GetPrivateProfileString().
Which is to say that if I Dim value As String = "xxx" then it stil contains "xxx" after the call and not the default value.
I've always use String.IsNullOrEmpty to check for a empty string. It recently come to my attention that a " " count as not a empty string. For example,
Dim test As String = " " If String.IsNullOrEmpty(test) Then MessageBox.Show("Empty String")
[Code]....
It will show "Not Empty String". So how do we check for " " or " " in a string?
My button gets a commandargument of empty string even though the commandargument gets set. I have verified it gets set to the correct ID in debug mode, but then when I go to access this commandargument later in the repeaters ItemCommand event the commandarguments are empty string. And I have no idea why. I end up getting a sq foreign key exception because it is inserting an ID of 0 from the empty string values. There is no other code regarding the repeaters buttons that would be resetting it.
I'm trying to do some validation testing in VB.NET. If Entity.WeekEndDate.ToString = String.Empty Then ErrorList.Add(New cValidationError("id", "Incorrect Week End Date"))
Where WeekEndDate is of type Date. When I originally build the object, how can I insert a value into WeekEndDate that will generate an empty string(ie. "") when converted from a Date to a String?