C# 如何命名字符串组中的项目?

C# 如何命名字符串组中的项目?,c#,string,C#,String,说 如果有每个项目的含义列表,如何命名strGroup的每个项目?因此,当我需要使用特定项时,我只使用strGroup[“LastName”]而不是strGroup[23]我认为您需要查看字符串字典 string[] strGroup=returnStr.split(','); 数组没有字符串,因此这是不可能的 您需要为字符串的每个部分定义一个名称-Split不会为您这样做 您可以使用具有已定义字符串的结构,但仍需要为每个项定义键 除非你在某个地方有每个字段的元数据,否则这个定义不会以神奇的方


如果有每个项目的含义列表,如何命名strGroup的每个项目?因此,当我需要使用特定项时,我只使用
strGroup[“LastName”]
而不是
strGroup[23]

我认为您需要查看字符串字典

string[] strGroup=returnStr.split(',');

数组没有字符串,因此这是不可能的

您需要为字符串的每个部分定义一个名称-
Split
不会为您这样做

您可以使用具有已定义字符串的结构,但仍需要为每个项定义键


除非你在某个地方有每个字段的元数据,否则这个定义不会以神奇的方式出现。例如,一些CSV解析器将通过使用第一行作为字段名来生成这样的集合。

这就是
字典
类的用途。在您的情况下,您需要一本
词典
。但是,在通过项目名称访问项目之前,必须对其进行一次初始化。

如果只有一个字符串,请使用
字典
数据类型

当您有一个完整的拆分字符串列表时,请使用DataTable和列名。

类似的内容(我知道,疯狂的LINQ对话)

string returnStr=“克劳斯、容克、约根森”;
字符串[]键=新字符串[]
{
“名字”,
“中间名”,
“姓氏”
};
字典组=returnStr.Split(',')
.Select((x,i)=>Tuple.Create(键[i],x))
.ToDictionary(k=>k.Item1,v=>v.Item2);
//替代版本
字典组=returnStr.Split(',')
.Zip(键,(k,v)=>新的KeyValuePair(k,v))
.ToDictionary(k=>k.Key,v=>v.Value);

我怀疑您试图使用
split
读取CSV文件/流

您可以使用split将第一行存储在数组中,然后在使用文件迭代行的同时,可以如下引用:

string returnStr = "Claus,Junker,Jørgensen";

string[] keys = new string[]
{
    "FirstName",
    "MiddleName",
    "LastName"
};

Dictionary<string, string> groups = returnStr.Split(',')
         .Select((x, i) => Tuple.Create(keys[i], x))
         .ToDictionary(k => k.Item1, v => v.Item2);

// Alternative version

Dictionary<string, string> groups = returnStr.Split(',')
         .Zip(keys, (k, v) => new KeyValuePair<string, string>(k, v))
         .ToDictionary(k => k.Key, v => v.Value);
string[] strGroup=returnStr.split(',');
var someThing = strGroup[GetIndex("LastName")];
然后定义
GetIndex
,如下所示:

string returnStr = "Claus,Junker,Jørgensen";

string[] keys = new string[]
{
    "FirstName",
    "MiddleName",
    "LastName"
};

Dictionary<string, string> groups = returnStr.Split(',')
         .Select((x, i) => Tuple.Create(keys[i], x))
         .ToDictionary(k => k.Item1, v => v.Item2);

// Alternative version

Dictionary<string, string> groups = returnStr.Split(',')
         .Zip(keys, (k, v) => new KeyValuePair<string, string>(k, v))
         .ToDictionary(k => k.Key, v => v.Value);
string[] strGroup=returnStr.split(',');
var someThing = strGroup[GetIndex("LastName")];
public int-GetIndex(string-str)
{
返回数组.IndexOf(headerArray,str);
}

我看到了很多字典示例,但是如果您要在代码中嵌入关于行格式的知识,为什么不将其作为一个类呢?使用构造函数将
returnStr
转换为属性:

public int GetIndex(string str)
{
    return Array.IndexOf<string>(headerArray, str);
}

使用这种方法,您不必维护一组字符串常量。这是否成功取决于您的具体问题。

但字符串的名称在哪里定义?这是第一行包含列名的CSV文件吗?嗯。。这将是一个非常脆弱的解析逻辑。是的,当然会。但这样一个疯狂的问题应该得到一个疯狂的答案:ptoobad,我使用不支持Tuple的.NET3.5。您的代码非常整洁,非常棒。我仍在努力理解。谢谢。请参阅非元组版本的替代版本。
class Group
{
    public string FirstName { get; private set;}
    public string LastName { get; private set;}
    [...]

    public Group(string returnStr)
    {
        string[] strGroup=returnStr.split(',');
        [...]
        this.FirstName = strGroup[22];
        this.LastName = strGroup[23];
        [...]
    }
 }