How to check if a dynamic object is null
I recently saw the following code, which puzzled me.
dynamic resultObj = SomeClass.run(arg);
if (resultObj == null || resultObj.ToString() == null)
{
/* Error handling */
}
Assuming SomeClass
is your typical class (which does not override ToString()
), is there a reason why the second part of the conditional would be necessary? Also, are there other potential issues with this code as it is?
c# dynamic null tostring
add a comment |
I recently saw the following code, which puzzled me.
dynamic resultObj = SomeClass.run(arg);
if (resultObj == null || resultObj.ToString() == null)
{
/* Error handling */
}
Assuming SomeClass
is your typical class (which does not override ToString()
), is there a reason why the second part of the conditional would be necessary? Also, are there other potential issues with this code as it is?
c# dynamic null tostring
What doesrun
return? If it could possibly return a class that overridesToString
in a way that could return null then yes, the second check is necessary if you use the result ofToString
in yourif
block. Alldynamic
means is "I don't know the type until runtime".
– D Stanley
Dec 27 '16 at 23:24
1
If it doesn't overrideToString
, then it's callingobject.ToString()
which returns the fully qualified name of the type of the Object - so yes - the.ToString() == null
check is not required.
– Rob♦
Dec 27 '16 at 23:31
Seems like poor design, to allow random classes to instantiate with random returns.
– Greg
Dec 27 '16 at 23:35
add a comment |
I recently saw the following code, which puzzled me.
dynamic resultObj = SomeClass.run(arg);
if (resultObj == null || resultObj.ToString() == null)
{
/* Error handling */
}
Assuming SomeClass
is your typical class (which does not override ToString()
), is there a reason why the second part of the conditional would be necessary? Also, are there other potential issues with this code as it is?
c# dynamic null tostring
I recently saw the following code, which puzzled me.
dynamic resultObj = SomeClass.run(arg);
if (resultObj == null || resultObj.ToString() == null)
{
/* Error handling */
}
Assuming SomeClass
is your typical class (which does not override ToString()
), is there a reason why the second part of the conditional would be necessary? Also, are there other potential issues with this code as it is?
c# dynamic null tostring
c# dynamic null tostring
asked Dec 27 '16 at 23:23
SidSid
6116
6116
What doesrun
return? If it could possibly return a class that overridesToString
in a way that could return null then yes, the second check is necessary if you use the result ofToString
in yourif
block. Alldynamic
means is "I don't know the type until runtime".
– D Stanley
Dec 27 '16 at 23:24
1
If it doesn't overrideToString
, then it's callingobject.ToString()
which returns the fully qualified name of the type of the Object - so yes - the.ToString() == null
check is not required.
– Rob♦
Dec 27 '16 at 23:31
Seems like poor design, to allow random classes to instantiate with random returns.
– Greg
Dec 27 '16 at 23:35
add a comment |
What doesrun
return? If it could possibly return a class that overridesToString
in a way that could return null then yes, the second check is necessary if you use the result ofToString
in yourif
block. Alldynamic
means is "I don't know the type until runtime".
– D Stanley
Dec 27 '16 at 23:24
1
If it doesn't overrideToString
, then it's callingobject.ToString()
which returns the fully qualified name of the type of the Object - so yes - the.ToString() == null
check is not required.
– Rob♦
Dec 27 '16 at 23:31
Seems like poor design, to allow random classes to instantiate with random returns.
– Greg
Dec 27 '16 at 23:35
What does
run
return? If it could possibly return a class that overrides ToString
in a way that could return null then yes, the second check is necessary if you use the result of ToString
in your if
block. All dynamic
means is "I don't know the type until runtime".– D Stanley
Dec 27 '16 at 23:24
What does
run
return? If it could possibly return a class that overrides ToString
in a way that could return null then yes, the second check is necessary if you use the result of ToString
in your if
block. All dynamic
means is "I don't know the type until runtime".– D Stanley
Dec 27 '16 at 23:24
1
1
If it doesn't override
ToString
, then it's calling object.ToString()
which returns the fully qualified name of the type of the Object - so yes - the .ToString() == null
check is not required.– Rob♦
Dec 27 '16 at 23:31
If it doesn't override
ToString
, then it's calling object.ToString()
which returns the fully qualified name of the type of the Object - so yes - the .ToString() == null
check is not required.– Rob♦
Dec 27 '16 at 23:31
Seems like poor design, to allow random classes to instantiate with random returns.
– Greg
Dec 27 '16 at 23:35
Seems like poor design, to allow random classes to instantiate with random returns.
– Greg
Dec 27 '16 at 23:35
add a comment |
1 Answer
1
active
oldest
votes
A dynamic can be checked for null directly, but some circumstances can cause false answers. In order to check a dynamic for null, you should cast it as an object. For example,
dynamic post = SomeMethod();
if (post.modified == null){
//could return errors.
}
in order to check this property for null, you should do something like this: string.IsNullOrEmpty(Convert.ToString(post.Modified));
similarly, to check a dynamic for null, you should do something like this:
if ((object)post != null)
References:
https://ericlippert.com/2018/11/19/a-dynamic-definite-assignment-puzzle-part-2/
https://forums.asp.net/t/1592751.aspx?How+to+check+for+null+empty+strings+on+dynamic+objects+
So, by checking a resultObj.ToString() == null I believe this may convert the dynamic to an object and therefore enable for true null checking.
custom operators may cause null checking on a dynamic object to return different logic than expected. stackoverflow.com/questions/7029699/…. You can get around this by casting to an object, I believe, feel free to downvote me and provide the reasons why I'm wrong.
– Patrick Knott
Nov 20 '18 at 21:34
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f41353430%2fhow-to-check-if-a-dynamic-object-is-null%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
A dynamic can be checked for null directly, but some circumstances can cause false answers. In order to check a dynamic for null, you should cast it as an object. For example,
dynamic post = SomeMethod();
if (post.modified == null){
//could return errors.
}
in order to check this property for null, you should do something like this: string.IsNullOrEmpty(Convert.ToString(post.Modified));
similarly, to check a dynamic for null, you should do something like this:
if ((object)post != null)
References:
https://ericlippert.com/2018/11/19/a-dynamic-definite-assignment-puzzle-part-2/
https://forums.asp.net/t/1592751.aspx?How+to+check+for+null+empty+strings+on+dynamic+objects+
So, by checking a resultObj.ToString() == null I believe this may convert the dynamic to an object and therefore enable for true null checking.
custom operators may cause null checking on a dynamic object to return different logic than expected. stackoverflow.com/questions/7029699/…. You can get around this by casting to an object, I believe, feel free to downvote me and provide the reasons why I'm wrong.
– Patrick Knott
Nov 20 '18 at 21:34
add a comment |
A dynamic can be checked for null directly, but some circumstances can cause false answers. In order to check a dynamic for null, you should cast it as an object. For example,
dynamic post = SomeMethod();
if (post.modified == null){
//could return errors.
}
in order to check this property for null, you should do something like this: string.IsNullOrEmpty(Convert.ToString(post.Modified));
similarly, to check a dynamic for null, you should do something like this:
if ((object)post != null)
References:
https://ericlippert.com/2018/11/19/a-dynamic-definite-assignment-puzzle-part-2/
https://forums.asp.net/t/1592751.aspx?How+to+check+for+null+empty+strings+on+dynamic+objects+
So, by checking a resultObj.ToString() == null I believe this may convert the dynamic to an object and therefore enable for true null checking.
custom operators may cause null checking on a dynamic object to return different logic than expected. stackoverflow.com/questions/7029699/…. You can get around this by casting to an object, I believe, feel free to downvote me and provide the reasons why I'm wrong.
– Patrick Knott
Nov 20 '18 at 21:34
add a comment |
A dynamic can be checked for null directly, but some circumstances can cause false answers. In order to check a dynamic for null, you should cast it as an object. For example,
dynamic post = SomeMethod();
if (post.modified == null){
//could return errors.
}
in order to check this property for null, you should do something like this: string.IsNullOrEmpty(Convert.ToString(post.Modified));
similarly, to check a dynamic for null, you should do something like this:
if ((object)post != null)
References:
https://ericlippert.com/2018/11/19/a-dynamic-definite-assignment-puzzle-part-2/
https://forums.asp.net/t/1592751.aspx?How+to+check+for+null+empty+strings+on+dynamic+objects+
So, by checking a resultObj.ToString() == null I believe this may convert the dynamic to an object and therefore enable for true null checking.
A dynamic can be checked for null directly, but some circumstances can cause false answers. In order to check a dynamic for null, you should cast it as an object. For example,
dynamic post = SomeMethod();
if (post.modified == null){
//could return errors.
}
in order to check this property for null, you should do something like this: string.IsNullOrEmpty(Convert.ToString(post.Modified));
similarly, to check a dynamic for null, you should do something like this:
if ((object)post != null)
References:
https://ericlippert.com/2018/11/19/a-dynamic-definite-assignment-puzzle-part-2/
https://forums.asp.net/t/1592751.aspx?How+to+check+for+null+empty+strings+on+dynamic+objects+
So, by checking a resultObj.ToString() == null I believe this may convert the dynamic to an object and therefore enable for true null checking.
edited Nov 20 '18 at 21:36
answered Nov 20 '18 at 19:20
Patrick KnottPatrick Knott
21325
21325
custom operators may cause null checking on a dynamic object to return different logic than expected. stackoverflow.com/questions/7029699/…. You can get around this by casting to an object, I believe, feel free to downvote me and provide the reasons why I'm wrong.
– Patrick Knott
Nov 20 '18 at 21:34
add a comment |
custom operators may cause null checking on a dynamic object to return different logic than expected. stackoverflow.com/questions/7029699/…. You can get around this by casting to an object, I believe, feel free to downvote me and provide the reasons why I'm wrong.
– Patrick Knott
Nov 20 '18 at 21:34
custom operators may cause null checking on a dynamic object to return different logic than expected. stackoverflow.com/questions/7029699/…. You can get around this by casting to an object, I believe, feel free to downvote me and provide the reasons why I'm wrong.
– Patrick Knott
Nov 20 '18 at 21:34
custom operators may cause null checking on a dynamic object to return different logic than expected. stackoverflow.com/questions/7029699/…. You can get around this by casting to an object, I believe, feel free to downvote me and provide the reasons why I'm wrong.
– Patrick Knott
Nov 20 '18 at 21:34
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f41353430%2fhow-to-check-if-a-dynamic-object-is-null%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What does
run
return? If it could possibly return a class that overridesToString
in a way that could return null then yes, the second check is necessary if you use the result ofToString
in yourif
block. Alldynamic
means is "I don't know the type until runtime".– D Stanley
Dec 27 '16 at 23:24
1
If it doesn't override
ToString
, then it's callingobject.ToString()
which returns the fully qualified name of the type of the Object - so yes - the.ToString() == null
check is not required.– Rob♦
Dec 27 '16 at 23:31
Seems like poor design, to allow random classes to instantiate with random returns.
– Greg
Dec 27 '16 at 23:35