Tim,[color=blue]
> I am using the static IsMatch of Regex. So I think I am
> not recreating a regex object each time.[/color]
Correct you are not explicitly creating a regex object each time, however
the static method IS implicitly creating a regex object each time for you.
Read the description of the static IsMatch carefully!
http://msdn.microsoft.com/library/de...atchTopic3.asp
The Remarks state: "The two static IsMatch methods are equivalent to
constructing a Regex object with the specified regular expression pattern
and calling the instance method IsMatch. The static methods are provided to
allow an isolated, single use of a regular expression without explicitly
creating a Regex object."
Note "isolated, single use" and "equivalent to constructing a regex object"
in the above statement. I would expect your IsFloat method to be called a
number of different times from a number of different places...
[color=blue]
> But your code seems slightly different.
> But I am not sure about "that" difference <g>.
> Would you mind to explain a bit more on this ?[/color]
What do you mean different? Do you mean I simply return the bool value,
rather then checking for true and returning true?
you effectively have:
bool rc = Regex.IsMath(...)
if (rc)
return true
else
return false;
where as I effectively have:
bool rc = Regex.IsMath(...)
return rc;
I used an explaining variable in the above sample, however they are the
same.
Or that you were passing a char, I modified it to pass a string.
Or that I created an object, and use an instance method of the object?
In your IsFloat routine, I would simply use:
private static readonly Regex floatPattern = new
Regex(@"^[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?$",
RegexOptions.Compiled);
public static bool IsFloat(string value)
{
return floatPattern.IsMatch(value)
}
floatPattern is:
- private : as its an implementation detail
- static : as we only need one instance of it
- readonly : as we don't need to change it after its initialized
IsFloat uses the above Regex to check for a match, value is already a
string, so we do not need to call ToString a second time. Seeing as
Regex.IsMatch returns a bool, we can simply return this bool. IsFloat
encapsulates the Regex object.
Hope this helps
Jay
"Tim Conner" <TimConner@discussions.microsoft.com> wrote in message
news:09f401c39b1c$7506b7f0$a601280a@phx.gbl...[color=blue]
>
> I have another similar routines, for check alpha numeric,
> and to test for integers and floats. So, I did that just
> by inertia <g>. I may change this routine since it is very
> straight forward, numbers are numbers, so no more to check
> here.
>
> But for my other routines, I think I do need regex. For
> example the following :
>
> public static bool IsFloat( string Value)
> {
> if (Regex.IsMatch( Value.ToString(), @"^[+-]?([0-9]*\.?
> [0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?$" ))
> {
> return true;
> }
> else return false;
>
> }
>
>
> I am using the static IsMatch of Regex. So I think I am
> not recreating a regex object each time.
> But your code seems slightly different.
> But I am not sure about "that" difference <g>.
> Would you mind to explain a bit more on this ?
>
>
> Thanks in advance,
>
>
>
>
>
>
>[color=green]
> >-----Original Message-----
> >Tim,
> >In addition to Jon's comments.
> >
> >Is there a reason you are not using the static[/color]
> Char.IsDigit or Char.IsNumber[color=green]
> >function?
> >[color=darkred]
> >> public static bool IsNumber( char Value )
> >> {[/color]
> > return Char.IsDigit(Value);[color=darkred]
> >> }[/color]
> >
> >Char has a number of other static functions that check[/color]
> the character's[color=green]
> >class.
> >
> >FWIW, when I have a static method that is checking[/color]
> a 'constant' regex, I[color=green]
> >normally create a static Regex field, then use that. This[/color]
> way the regex[color=green]
> >object itself is not continueally recreated. I even[/color]
> consider making this[color=green]
> >Regex compiled with the RegexOptions.Compiled option, to[/color]
> get even a little[color=green]
> >more performance out of it. Seeing as its static, there[/color]
> is only going to be[color=green]
> >one anyway.
> >
> >Something like:
> >
> > static readonly Regex thePattern = new Regex(@"^[0-9][/color]
> +$",[color=green]
> >RegexOptions.Compiled);
> >[color=darkred]
> >> public static bool IsNumber( string value )
> >> {[/color]
> > return thePattern.IsMatch(value);[color=darkred]
> >> }[/color]
> >
> >Hope this helps
> >Jay
> >
> >
> >"Tim Conner" <TimConner@discussions.microsoft.com> wrote[/color]
> in message[color=green]
> >news:08da01c39ac8$64941970$a101280a@phx.gbl...[color=darkred]
> >>
> >> Is there a way to write a faster function ?
> >>
> >> public static bool IsNumber( char Value )
> >> {
> >> if (Regex.IsMatch( Value.ToString(), @"^[0-9][/color][/color]
> +$" ))[color=green][color=darkred]
> >> {
> >> return true;
> >> }
> >> else return false;
> >> }
> >>
> >> I think, if I have to repat this some thousands time, it
> >> could become very time consuming.
> >>
> >> Thanks in advance,
> >>
> >> P.S.
> >> Is there in C# something similar to Delphi's sets ?
> >>[/color]
> >
> >
> >.
> >[/color][/color]