Tim,
I am using the static IsMatch of Regex. So I think I am
not recreating a regex object each time.
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/d...RegularExpressionsRegexClassIsMatchTopic3.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...
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 ?
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 said:
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,
-----Original Message-----
Tim,
In addition to Jon's comments.
Is there a reason you are not using the static Char.IsDigit or Char.IsNumber
function?
public static bool IsNumber( char Value )
{ return Char.IsDigit(Value);
}
Char has a number of other static functions that check the character's
class.
FWIW, when I have a static method that is checking a 'constant' regex, I
normally create a static Regex field, then use that. This way the regex
object itself is not continueally recreated. I even consider making this
Regex compiled with the RegexOptions.Compiled option, to get even a little
more performance out of it. Seeing as its static, there is only going to be
one anyway.
Something like:
static readonly Regex thePattern = new Regex(@"^[0-9] +$",
RegexOptions.Compiled);
public static bool IsNumber( string value )
{
return thePattern.IsMatch(value);
Hope this helps
Jay
Is there a way to write a faster function ?
public static bool IsNumber( char Value )
{
if (Regex.IsMatch( Value.ToString(), @"^[0-9] +$" ))
{
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 ?
.