Related: How do I create a static local variable in Java?¿C# admite el uso de variables locales estáticas?
Perdón si esto es un duplicado; Estaba bastante seguro de que esto se habría preguntado anteriormente, y miré, pero no encontré una víctima.
¿Es posible para mí crear una variable local estática en C#? ¿Si es así, cómo?
Tengo un método privado estático que se utiliza con poca frecuencia. el método estático usa una Expresión regular, que me gustaría inicializar una vez, y solo cuando sea necesario.
En C, podría hacer esto con una variable estática local. ¿Puedo hacer esto en C#?
Cuando intento compilar este código:
private static string AppendCopyToFileName(string f)
{
static System.Text.RegularExpressions.Regex re =
new System.Text.RegularExpressions.Regex("\\(copy (\\d+)\\)$");
}
... me da un error:
error CS0106: The modifier 'static' is not valid for this item
Si no hay ninguna variable estática local, supongo que podría aproximar Lo que quiero es crear una pequeña clase estática privada e insertar el método y la variable (campo) en la clase. De esta manera:
public class MyClass
{
...
private static class Helper
{
private static readonly System.Text.RegularExpressions.Regex re =
new System.Text.RegularExpressions.Regex("\\(copy (\\d+)\\)$");
internal static string AppendCopyToFileName(string f)
{
// use re here...
}
}
// example of using the helper
private static void Foo()
{
if (File.Exists(name))
{
// helper gets JIT'd first time through this code
string newName = Helper.AppendCopyToFileName(name);
}
}
...
}
Pensando en esto más, el uso de una clase de ayuda como esto no produciría un mayor ahorro neto en la eficiencia, porque la clase ayudante no se JIT'd o se carga menos que sea necesario. ¿Derecha?
vb.net tiene esta característica –
También puede usar el tipo 'Lazy' para crear un campo estático con la inicialización lenta, ¿cumple eso con sus requisitos? –
No sabía sobre Lazy. ¿Eso implica que soy perezoso? – Cheeso