一个小小的新手问题。我有一个foreach循环,我试图访问行对象的属性并分配给字符串。
foreach(row in Dataset)
{
string finalName= row.name;
}
在每次迭代中,我需要将每一行的name属性连接到finalName
\非常感谢,
答案 0 :(得分:25)
根据您的性能要求,您可以使用加法运算符进行连接:
string finalName = string.Empty;
foreach(row in Dataset)
{
finalName += row.name;
}
或使用StringBuilder:
Stringbuilder sb = new StringBuilder();
foreach(row in Dataset)
{
sb.Append(row.Name);
}
string finalName = sb.ToString();
对于非常少量的追加,您不会注意到两个版本之间的差异。但是如果你要组合很多字符串,那么使用StringBuilder可能会有非常明显的性能和内存优势。
另外请记住,这会将琴弦一个接一个地直接放置,因此您可能还希望在每个琴弦之间添加一个空格或新行。
特别奖金LINQ单线:
因为你似乎是C#的新手,我建议你忽略这个,因为它非常先进,坦率地说不可读(但另一方面谁不喜欢将随机的LINQ投入他们的代码? )。不过,为了完整起见,我会在这里添加它。我不知道性能是什么,但与其他方法相比的一个主要优点是易于使用,您可以在字符串之间放置空格或其他字符。只需将标记行中的值更改为您要将组合字符串与(例如,Environment.NewLine或“”)分隔的任何值
string finalName = string.Join(
"", //Change the value here to separate the strings.
(from row in Dataset
select row.Name).ToArray());
或者,如果你更喜欢lambdas到LINQ:
string finalName = string.Join(
"", //Change the value here to separate the strings.
Dataset.Select(row => row.Name).ToArray());
答案 1 :(得分:3)
只是一些事情......
DataSet
没有行,他们有DataTable
个,DataTable
个DataRows
+=
运算符来执行连接,但一般建议是StringBuilder
对象因性能和内存原因而更适合这种情况。假设您的DataSet
有一个DataTable
且您所关注的列名为name
,您可以使用其中任何一个(第一个使用+=
运算符,第二个使用StringBuilder
)
string finalName = string.Empty;
foreach(DataRow row in dataSet.Tables[0].Rows)
{
finalName += row["name"].ToString();
}
或
System.Text.StringBuilder builder = new System.Text.StringBuilder();
foreach(DataRow row in dataSet.Tables[0].Rows)
{
builder.Append(row["name"].ToString());
}
string finalName = builder.ToString();
答案 2 :(得分:1)
如果你真的只想结束,那么这就是你所需要的......
string finalName = "";
foreach(DataRow row in dataset.Tables[tablename].Rows)
{
finalName += row.name;
}
答案 3 :(得分:1)
这是一个......
string finalName = ""
foreach (DataRow row in dataSet.TableX)
{
finalName += row.Name;
finalName += Environment.NewLine;
}
这是另一个......
StringBuilder finalName = new StringBuilder()
foreach (DataRow row in dataSet.TableX)
{
finalName.Append(row.Name);
finalName.Append(Environment.NewLine);
}
答案 4 :(得分:0)
您可以将值添加到列表中,然后加入列表中的值
before_action :check_has_access, only: [:new]
...
protected
def check_has_access
@place = Place.find(params[:q])
if params[:q].blank? && @place.blank? || params[:t].blank? || @place.token != params[:t]
redirect_to(root_path)
flash[:alert] = 'Restricted sign-up'
end
end