开发者

c# Object obj's value is {}. What is "{}"?

I'm using some old code that runs a sql query as a reference.

At some point, it gets to something like:

sqlDataAdapter.Fill(dataSet);
DataRow dataRow = dataSet.Tables[0].Rows[0];
Object obj = dataRow[fieldName];

The old code does:

string output;
if (!string.IsNullOrEmpty(obj.ToString())) { output = obj.ToString(); }
else { output = "Not Available"; }

I changed them to:

output = obj as string ?? "Not Available"

But sometimes, it broke. As I suspected, it was happening breaking when the entry was an int. Casting as an int in those cases solved that problem.

Then another problem arose when there was no entry for obj[fieldName] of type int. When I stepped through the debugger, I was surprised to find that obj wasn't null. In VS, mousing over revealed it had a value {}.

What the heck is {}? How do I make a boolean test of it?

(In the old code, it appears开发者_如何学JAVA .ToString() returns "" in this case and works as expected.)


{ and } are opening and closing braces and symbolic of the start and finish of an object. Hence an empty object with no special properties is depicted in shorthand as {}. The debugger uses this notation to help you visually distinguish between an empty object, an empty string and null.

If you hover over obj[fieldName] and there is no entry for fieldName, the debugger won't care about that, it'll show the value of obj. You'll have to use the immediate window or a watch/quickwatch. The debugger will only see you hovering over obj and assume you're referring to the array itself, not the contents of the array at the specified index.


In case anyone comes across again this problem.

Solution if val object is shown {} in debug mode

// Check if its not null or empty
if (!IsNullOrEmpty(val.ToString().ToArray()))
{
    // Do something with val
    dt.Rows.Add(val);
}

public static bool IsNullOrEmpty<T>(T[] array)
{
    return array == null || array.Length == 0;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜