这是列表上的SetKey i循环的代码取出转换为字符串的数字并将其放入SetKey现在我需要使用GetKey来反转操作并将数字放回列表所以eahc List Point_X和Point_Y将具有以前的数字。
string[] xFrames = new string[wocl.Count];
string[] yFrames = new string[wocl.Count];
string X="";
string Y="";
for (int i = 0; i < wocl.Count; i++)
{
X = string.Format("Frame_X_{0} ", i + 1);
Y = string.Format("Frame_Y_{0} ", i + 1);
for (int j = 0; j < wocl[i].Point_X.Count; j++)
{
xFrames[i] += string.Format("{0},", wocl[i].Point_X[j]);
yFrames[i] += string.Format("{0},", wocl[i].Point_Y[j]);
}
string tt = xFrames[i].Trim(",".ToCharArray());
string yy = yFrames[i].Trim(",".ToCharArray());
setting_file.SetKey(X, tt);
setting_file.SetKey(Y, yy);
}
现在tt是一个数字字符串,例如122,33,44,55,121
现在我需要解析数字。现在我需要获取字符串并解析数字并将它们放回浮点列表:
列出a = setting_file.GetKey(X);
但是X是一个键,它表示一串数字而不是数字列表。
这是GetKey和SetKey函数的OptionsFile中的代码:
/*----------------------------------------------------------
* Function : GetKey
* Description : gets the value of the key.
* Parameters : key
* Return : value of the key if key exist, null if not exist
* --------------------------------------------------------*/
public string GetKey(string key)
{
// string value_of_each_key;
string key_of_each_line;
string line;
int index;
string key_value;
key_value = null;
sr = new StreamReader(Options_File);
while (null != (line = sr.ReadLine()))
{
index = line.IndexOf("=");
// value_of_each_key = line.Substring(index+1);
if (index >= 1)
{
key_of_each_line = line.Substring(0, index);
if (key_of_each_line == key)
{
key_value = line.Substring(key.Length + 1);
}
}
else
{
}
}
sr.Close();
return key_value;
}
/*----------------------------------------------------------
* Function : SetKey
* Description : sets a value to the specified key
* Parameters : key and a value
* Return : none
* --------------------------------------------------------*/
public void SetKey(string key , string value)
{
bool key_was_found_inside_the_loop;
string value_of_each_key;
string key_of_each_line ;
string line;
int index;
key_was_found_inside_the_loop = false;
temp_settings_file = "\\temp_settings_file.txt";
temp_settings_dir = path_exe + @"\temp_settings";
if (!Directory.Exists(temp_settings_dir))
{
Directory.CreateDirectory(temp_settings_dir);
}
sw = new StreamWriter(temp_settings_dir+temp_settings_file);
sr = new StreamReader(Options_File);
while (null != (line = sr.ReadLine()))
{
index = line.IndexOf("=");
key_of_each_line = line.Substring(0, index);
value_of_each_key = line.Substring( index + 1);
// key_value = line.Substring(0,value.Length);
if (key_of_each_line == key)
{
sw.WriteLine(key + " = " + value);
key_was_found_inside_the_loop = true;
}
else
{
sw.WriteLine(key_of_each_line+"="+value_of_each_key);
}
}
if (!key_was_found_inside_the_loop)
{
sw.WriteLine(key + "=" + value);
}
sr.Close();
sw.Close();
File.Delete(Options_File);
File.Move(temp_settings_dir + temp_settings_file, Options_File);
return;
}
我需要的是在List a中它将包含字符串X
中的数字X就像一个键,SetKey函数的结果是一个Key = Value
例如:Hello = 122,33,44,55,66 Hello就像变量X一样是键,右边是数字键值。
所以现在我需要获取关键X值并将它们放入List
无法弄清楚如何做到这一点。
如果之前我有一个List并且我循环它并从List中取出数字并创建了一个数字字符串并将它们放入SetKey现在我需要使用GetKey并取出数字并将它们放回去到列表
编辑:
public void Load(string path,string fileName)
{
string X = "";
string t = path + "\\" + fileName;
OptionsFile setting_file = new OptionsFile(t);
for (int i = 0; i <= wocl.Count ; i++)
{
X = string.Format("Frame_X_{0} ", i + 1);
}
string test = setting_file.GetKey(X);
}
Thep roblem是如果我在List wocl的循环中运行所以当我运行程序时这个List是0或1。但是在文本文件中的GetKey我可能有4帧或1帧我的意思是我知道在循环中需要多少钱?
我尝试使用wocl List进行测试但是现在在字符串测试中我得到了第一个Frame_X_1的数字,但就是这样。
在hte文件中,它看起来像是:
Frame_X_1 =332,325,336,334,332,325,333,328,332
Frame_Y_1 =218,217,202,212,211,210,204,202,204
Frame_X_2 =270,325,336,347,321,325,333,328,332
Frame_Y_2 =257,217,202,282,156,210,204,202,204
Frame_X_3 =270,325,336,347,321,336,270,371,332
Frame_Y_3 =257,217,202,282,156,250,199,135,204
我的意思是当我运行该程序时,所有列表都是空数到0然后我需要检索每个键Frame_X_1然后是Frame_Y_1等等......而且我不知道有多少键。
答案 0 :(得分:0)
假设您有一个类似“123,33.44.55.66”的字符串,并且您知道此字符串是逗号分隔的。检索数字:
string str = "123,33,44,55,66";
string[] strArray = str.Split(',');
然后,您可以将strArray
转换为兼容的任何类型。
答案 1 :(得分:0)
将此添加到静态助手类
public static List<T> ToListOf<T>(this IEnumerable enumerable)
{
var list = new List<T>();
foreach (var item in enumerable)
{
list.Add(item.ConvertTo<T>());
}
return list;
}
然后:var myFloats = tt.Split(',').ToListOf<float>();
优雅,不是吗? :)
修改
我忘记了另外一种扩展方法:
public static T ConvertTo<T>(this object source)
{
return (T)Convert.ChangeType(source, typeof(T));
}