How to check if a dynamic object is null












1















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?










share|improve this question























  • 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





    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
















1















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?










share|improve this question























  • 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





    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














1












1








1








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?










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Dec 27 '16 at 23:23









SidSid

6116




6116













  • 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





    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



















  • 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





    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

















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












1 Answer
1






active

oldest

votes


















0














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.






share|improve this answer


























  • 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











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
});


}
});














draft saved

draft discarded


















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









0














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.






share|improve this answer


























  • 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
















0














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.






share|improve this answer


























  • 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














0












0








0







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.






share|improve this answer















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.







share|improve this answer














share|improve this answer



share|improve this answer








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



















  • 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




















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

ComboBox Display Member on multiple fields

Is it possible to collect Nectar points via Trainline?