我最近开始使用Tuple
,我目前正从DB中检索两个值
我的函数有一个基本的SQL
查询来从DB
public Tuple<string, string> GetName()
{
using (SqlConnection connection = new SqlConnection(Common.ConnectionString))
{
string userName = HttpContext.Current.User.Identity.Name;
using (SqlCommand cmd = new SqlCommand("SELECT Firstname, Surname FROM Users WHERE Username=@Username"))
{
cmd.Parameters.AddWithValue("Username", userName);
cmd.Connection = connection;
connection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
FirstName = reader["Firstname"].ToString();
SurName = reader["Surname "].ToString();
}
}
}
}
return Tuple.Create(Firstname, Surname);
}
我在前端显示值为
<h4>Welcome <b><%: GetName() %></b></h4>
该函数按预期返回值,但似乎将它们放在括号中,如下所示
(约翰,史密斯)我想知道我是否可以移除价值周围的()
?
我试过了return new Tuple<string, string>(FirstName, Surname);
,但它仍然是一样的。如果我错过了一些相当明显的东西,请原谅我。提前感谢您的所有帮助和支持
答案 0 :(得分:3)
(John, Smith)
是调用元组ToString()
的结果,而#34; John&#34;作为Item1
和&#34; Smith&#34;为Item2
。
可能您正在GetName()
显示某个地方,因此隐式调用ToString()
。
因此,只有在隐式调用ToString()
并明确使用yourTuple.Item1
和yourTuple.Item2
时才能避免这种情况。
答案 1 :(得分:3)
将内容括在括号中是通过ToString()
Tuple
调用来完成的,例如:
Tuple.Create("Foo", "Bar", "Baz").ToString()
产生
(Foo, Bar, Baz)
你可以简单地做
String.Join(", ", tuple.Item1, tuple.Item2, tuple.Item2)
或
tuple.ToString().Trim('(', ')')
生产
Foo, Bar, Baz
你可能最好创建一个类或结构来保存数据:
public struct Person
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public readonly string FirstName;
public readonly string LastName;
public override string ToString()
{
return this.FirstName + " " + this.LastName;
}
}
然后使用:
public Person GetName()
{
// ...
return new Person(firstName, lastName);
}