diff --git a/Source/Settings/ConfigurationFileStore.Parsing.cs b/Source/Settings/ConfigurationFileStore.Parsing.cs index 491e3fa..ed8b6cc 100644 --- a/Source/Settings/ConfigurationFileStore.Parsing.cs +++ b/Source/Settings/ConfigurationFileStore.Parsing.cs @@ -239,18 +239,15 @@ namespace Nuclex.Support.Settings { if(value.Count >= 2) { int index = value.Offset; if(ParserHelper.SkipInteger(value.Text, ref index)) { - if(index < value.Offset + value.Count) { - if(value.Text[index] == '.') { - return typeof(float); - } + if(index >= value.Offset + value.Count) { + return typeof(int); + } + if(value.Text[index] == '.') { + return typeof(float); } - - return typeof(int); } - } else if(value.Count >= 1) { // If it's at least one character, it may be a number - int index = value.Offset; - ParserHelper.SkipNumericals(value.Text, ref index); - if(index > value.Offset) { + } else { // If it's just a single character, it may be a number + if(char.IsNumber(value.Text, value.Offset)) { return typeof(int); } } diff --git a/Source/Settings/ConfigurationFileStore.Test.cs b/Source/Settings/ConfigurationFileStore.Test.cs index e5333d5..b1ae6a5 100644 --- a/Source/Settings/ConfigurationFileStore.Test.cs +++ b/Source/Settings/ConfigurationFileStore.Test.cs @@ -356,10 +356,13 @@ namespace Nuclex.Support.Settings { /// [ Test, + TestCase("nothing=", typeof(string)), TestCase("text = world", typeof(string)), TestCase("short=9", typeof(int)), TestCase("integer = 123", typeof(int)), TestCase("integer = 123 ", typeof(int)), + TestCase("string=x", typeof(string)), + TestCase("string = 123s", typeof(string)), TestCase("float = 123.45", typeof(float)), TestCase("float = 123.45 ", typeof(float)), TestCase("boolean = true", typeof(bool)),