我可以将一个字符串数组转换为一个子字符串数组数组吗?

时间:2016-04-13 04:51:52

标签: c# arrays split

我有一个文本文件,其中包含每行的产品信息,格式为" productCode,productName,amountInStock等。"

我已使用File.ReadAllLines将每一行存储为数组中的元素,现在我使用这些字符串将值分配给产品结构列表。

以下是用于将数组中的字符串拆分为子字符串的代码:

foreach (String line in readProducts)
{
    productData = line.Split(',');
    readProducts[foreachCount] = productData;
    foreachCount++;
}

这在Visual Studio中给了我这个错误:

Cannot implicitly convert type 'string[]' to 'string'

假设我必须使用结构而不是类,那么完成此任务的最佳方法是什么?

4 个答案:

答案 0 :(得分:0)

使用这种方式

List<string[]> readProducts = new List<string[]>();
foreach (String line in readProducts)
        {
            productData = line.Split(',');
            readProducts.Add(productData);
        }

答案 1 :(得分:0)

这是一个更好的选择:

product成为类,包含问题中提到的productCode, productName,amountInStock,etc..等属性。您可以创建product列表并直接将输入值分配给列表,如下所示:

string path="path here"
List<product> ProductList = new List<product>();
foreach (string line in File.ReadAllLines(path))
{
    string[] productDetails = line.Split(',');
    ProductList.Add(new product() { productCode = productDetails[0], productName = productDetails[1] }); 
}

Product类的位置如下:

public class product
{
    public string  productCode { get; set; }
    public string  productName { get; set; }
    // rest of properties
}

答案 2 :(得分:0)

您可以使用Select投射到新收藏集:

var allItems = readProducts.Select(line => line.Split(','));  // collection of string arrays

或投射到新类型:

var allProducts = readProducts.Select(line => line.Split(','))  // collection of string arrays
                              .Select(array => new Product {
                                              productCode   = array[0],
                                              productName   = array[1],
                                              amountInStock = array[2], 
                                                  // etc.
                                              });  // collection of Products

答案 3 :(得分:0)

使用System和锯齿状数组,我能够解决问题。这是工作程序中使用的代码。

int i = 0;
String[][] allProducts = new String[readProducts.Length][];
var parsedProduct = readProducts.Select(item => item.Split(','));
foreach (var item in parsedProduct)
    {
        allProducts[i] = item;
        i++;
    }

allProducts[][]是一个锯齿状的数组。否则称为阵列数组。

parsedProduct类似于锯齿状数组,每个元素包含另一个数组,其中从当前行readProduct中提取的子字符串作为其元素。

allProducts的元素被parsedProducts循环分配给foreach元素的内容。

据我所知,没有任何方法可以切断中间人并直接在Select()使用readProducts。但我可能是错的。