我有一系列以管道分隔格式的数据,其中奇数条目是索引号,偶数条目就是数据,例如。
1|cat|2|dog|3|manatee|4||5|gerbil|6|etc
(注意偶尔缺少值)
我想知道是否有一种很好的.NET类型方法可以将其转换为具有id和name参数的类宠物。
我有一些代码执行String.Split
并迭代数组,将对象拼凑在一起,但它看起来更像是我正在编写PL / SQL而不是C#...我确信有一种在Linq或者其他方面做到这一点的方法 - 任何人都可以告诉我“正确”的方式吗?
由于
答案 0 :(得分:3)
您可以使用TextFieldParser类来处理将字符串解析为字段(我知道它是VB类,但您可以从C#访问它)。然后只需将交替的字段设置为新对象。
以下是MSDN中的示例,更改为C#:
using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader =
new Microsoft.VisualBasic.FileIO.TextFieldParser("C:\\testfile.txt"))
{
MyReader.TextFieldType = FileIO.FieldType.Delimited;
MyReader.SetDelimiters(",");
string[] currentRow = null;
while (!MyReader.EndOfData)
{
try
{
currentRow = MyReader.ReadFields();
string currentField = null;
foreach (var currentField in currentRow)
{
//set values for your object here
}
}
catch (Microsoft.VisualBasic.FileIO.MalformedLineException ex)
{
//handle the exception
}
}
}
答案 1 :(得分:1)
这就是我这样做的方式,它起作用,但似乎不是'.NET'的做法......
public List<Pet> CreatePets(String PetData)
{
List<Pet> PetList = new List<Pet>();
string[] PetArray = PetData.Split(new char[]{'|'}, StringSplitOptions.None);
for (int i = 0; i < PetArray.Count(); i += 2)
{
Pet NewPet= new Pet(Convert.ToInt32(PetArray[i]), PetArray[i+1]);
PetList.Add(Field);
}
return PetList;
}
答案 2 :(得分:0)
这是我用“|”拆分字符串数组的解决方案。它在GridView列中运行良好。
Public Function GridViewColumnsWidths(ByVal Gridview As GridView, ByVal ColumnNameCommaWidth As String) As Boolean
Dim i As Boolean
Dim ArrayOfItem As String() = Split(ColumnNameCommaWidth, "|",, CompareMethod.Text) 'eg: "ColA|200|ColB|100|ColC|300"
For IndexOfItem As Integer = 0 To ArrayOfItem.Count - 1
Dim Column As String = ArrayOfItem(IndexOfItem)
Dim Width As Integer = Convert.ToInt16(ArrayOfItem(IndexOfItem + 1))
With Gridview.Columns
.Item(Column).Width = Width
End With
IndexOfItem += 1
Next
Return i
End Function