tags:

views:

744

answers:

5

Why doesn't C# have local static variables like C? I miss that!!

+3  A: 

C# is a component-oriented language and doesn't have the concept of variables outside the scope of a class or local method. Variables within a method cannot be declared static either, as you may be accustomed to doing in C. However, you can always use a class static variable as a substitute.

As a general practice, there are usually ways to solve programming problems in C# without resorting to using method-level statics. State is generally something you should design into classes and types, not methods.

LBushkin
+7  A: 

State is generally part of an object or part of a type, not part of a method. (The exception being captured variables, of course.)

If you want the equivalent of a local static variable, either create an instance variable or a static variable - and consider whether the method itself should actually be part of a different type with that state.

Jon Skeet
Please note that in C++ you could use static "variables" for constant values. Since C# has only constants in math sense in effect you get very cumbersome way to work with local, computed, constants (like sqrt of 2, just an example).
macias
+3  A: 

I'm not nearly as familiar with C as I am C#, but I believe you can accomplish everything you could with a local static, by using a class level static that is only used for one method. Obviously, this comes with some syntactic change, but I believe you can get whatever functionality you need.

Additionally, Eric Lippert answers questions like this on his blog a lot. Generally answered in this way: "I am asked "why doesn't C# implement feature X?" all the time. The answer is always the same: because no one ever designed, specified, implemented, tested, documented and shipped that feature." Essentially his answers generally boil down to, it costs money to add any feature, and therefore, many potential features are not implemented because they have not come out on the positive side of the cost benefit analysis.

Timothy Carter
I couldn't have said it better myself.
Eric Lippert
A: 

I'm a new generation developer, meaning, i've ONLY programmed in .NET, but that's still 8 years of c#.

I think the idea of local statics is just as easily solved by creating public static fields to the class. Very little logical change don't you think?

If you think it would be a big logical change, i'd be interested to hear how.

class MyClass {

public static float MaxDepthInches = 3;

private void PickNose() {

If (CurrentFingerDepth < MyClass.MaxDepthInches)

{ CurrentFingerDepth++; }

}

}

mike
+1  A: 

Because they screwed up, and left out a useful feature to suit themselves.

All the arguments about how you should code, and what's smart, and you should reconsider your way of life, are pompous defensive excuses.

Sure, C# is pure, and whatchamacallit-oriented. That's why they auto-generate persistent locals for lambda functions. It's all so complicated. I feel so dumb.

Loop scope static is useful and important in many cases.

Short, real answer, is you have to move local statics into class scope and live with class namespace pollution in C#. Take your complaint to city hall.