Search code examples
c#.netopentext

dotNet/C#: Check if a variable was declared


I can't find an answer to my problem. In dotNet/C#, is it possible to check if a variable was declared to some type and if not, declare it? Thanks

[Edit] In this case, C# is used as a preexecute language in Open Text CMS. C# code can be used in any module. Using a non-declared variable throws hard to debug errors, as does double-declaring a variable. That's why I'd like to check.

[Edit2] Yes it is most probably compiled somewhere, but the errors are thrown (or rather not thrown) on runtime

[Edit3] Further explanation:
In Open Text, every page can hold several modules, several instances of a module and the same instance of a module several times. In each module, you can use C# as a "pre-execute" language. This is mostly really easy scripting to maneuver around the failings of OpenText. You introduce small variables, set them to true or false, and three lines later write a condition based on the variable. We could (and do) declare a bunch of variables in an initialization block of the page, but since there are so many, it would help to be able to check if a variable was declared and if not, declare it.
I like the idea of changing this to a key/value dictionary but this is a really large site with loads of pages/modules and instances and I'm looking for a working solution without changing the whole thing.
The actual code is really simple most oft he time:

var hasHeadline = false; // this will throw an error if hasHeadline was declared before
hasHeadline = true; // if some CMS condition is met. this will throw an error if hasHeadline wasn't declared
if(hasHeadline) { ** CMS code ** }

As I said, this will show up in multiple instances over which I don't have full control. The resulting "error" will be that the whole code block is stripped from the page.


Solution

  • Declare a single variable that is dynamic, e.g. an ExpandoObject.

    dynamic Globals = new ExpandoObject();
    

    Use this variable to store all of your global state.

    Globals.hasHeadline = false;  //No declaration needed, so 
    Globals.hasHeadline = true;   //no chance of a duplicate declaration