C# 值不为';I don’我不在预期范围之内

C# 值不为';I don’我不在预期范围之内,c#,exception,file-io,windows-mobile-5.0,C#,Exception,File Io,Windows Mobile 5.0,我正在构建一个应用程序,它使用一个文件来配置一些字体。是这样的: Font = Verdana Size = 12 Style = Bold openDialog.ShowDialog(); string file = openDialog.FileName; StreamReader reader = new StreamReader(file); while (reader.Peek() <= 0) { string line = reader.ReadLine();

我正在构建一个应用程序,它使用一个文件来配置一些字体。是这样的:

Font = Verdana
Size = 12
Style = Bold
openDialog.ShowDialog();
string file = openDialog.FileName;
StreamReader reader = new StreamReader(file);
while (reader.Peek() <= 0)
{
    string line = reader.ReadLine();
    string[] data = Split(new[] { '=' });
    // property is in data[0]
    // value is in data[1]
    TextFont = data[1];
    TextSize = data[3];
    TextSt = data[5];
}
reader.Close();
reader.Dispose();
textBox1.Font = new System.Drawing.Font(TextFont, 12F, FontStyle.Bold);
我的代码是这样的:

Font = Verdana
Size = 12
Style = Bold
openDialog.ShowDialog();
string file = openDialog.FileName;
StreamReader reader = new StreamReader(file);
while (reader.Peek() <= 0)
{
    string line = reader.ReadLine();
    string[] data = Split(new[] { '=' });
    // property is in data[0]
    // value is in data[1]
    TextFont = data[1];
    TextSize = data[3];
    TextSt = data[5];
}
reader.Close();
reader.Dispose();
textBox1.Font = new System.Drawing.Font(TextFont, 12F, FontStyle.Bold);
但当我执行它时,我得到了一个错误:

论据例外

值不在预期范围内

那么我有两个问题:

  • 我怎样才能解决这个问题
  • 如何在
    Font
    方法中使用浮点数来实现它,而不是
    TextSize
    的字符串

谢谢。

您正在阅读一行,但试图从中获取三个值。请看评论:

// property is in data[0]
// value is in data[1]
然后使用数据[1]、数据[3]和数据[5]

您可能需要以下内容:

openDialog.ShowDialog();
string file = openDialog.FileName;
string[] lines = File.ReadAllLines(file);
foreach (string line in line)
{
    string[] data = line.Split('=');
    string property = data[0].Trim();
    string value = data[1].Trim();
    switch (property)
    {
        case "Font": TextFont = value; break;
        case "Size": TextSize = value; break;
        case "Style": TextSt = value; break;
        default:
          // Whatever you want to do here for properties you don't recognise
          break;
    }
}

你在读一行,然后试着从中取三个值。请看评论:

// property is in data[0]
// value is in data[1]
然后使用数据[1]、数据[3]和数据[5]

您可能需要以下内容:

openDialog.ShowDialog();
string file = openDialog.FileName;
string[] lines = File.ReadAllLines(file);
foreach (string line in line)
{
    string[] data = line.Split('=');
    string property = data[0].Trim();
    string value = data[1].Trim();
    switch (property)
    {
        case "Font": TextFont = value; break;
        case "Size": TextSize = value; break;
        case "Style": TextSt = value; break;
        default:
          // Whatever you want to do here for properties you don't recognise
          break;
    }
}

Jon Skeet已经回答了您的第一个问题,因此对于您的第二个问题(如何将字体大小解析为浮点):


其中s是包含字体大小的字符串。

Jon Skeet已经回答了您的第一个问题,因此对于您的第二个问题(如何将字体大小解析为浮点):


其中s是包含字体大小的字符串。

您可能还存在数据转换问题:Split()方法返回字符串数组,但TextSize是一个浮点,而TextStyle是一个枚举(FontStyle)。虽然我们人类可以很容易地分辨出数字12和字符串“12”至少是相关的,但编译器要挑剔得多

对于文本大小,您可以尝试以下方法:

float fSize;
if (float.TryParse(data[3], out fSize))
    TextSize = fSize;
处理TextStyle可能有点棘手,因为您必须将字符串值与不同的枚举值进行比较。例如,要检测“粗体”样式,您可以编写:

if (String.Compare("Bold", data[5]) == 0)  // true if equal
    TextStyle = FontStyle.Bold;
干杯! 卑微的程序员
,,,,,,,,,

您可能还存在数据转换问题:Split()方法返回字符串数组,但TextSize是一个浮点,而TextStyle是一个枚举(FontStyle)。虽然我们人类可以很容易地分辨出数字12和字符串“12”至少是相关的,但编译器要挑剔得多

对于文本大小,您可以尝试以下方法:

float fSize;
if (float.TryParse(data[3], out fSize))
    TextSize = fSize;
处理TextStyle可能有点棘手,因为您必须将字符串值与不同的枚举值进行比较。例如,要检测“粗体”样式,您可以编写:

if (String.Compare("Bold", data[5]) == 0)  // true if equal
    TextStyle = FontStyle.Bold;
干杯! 卑微的程序员 ,,,,^…^