我想从数据库中获取一些Id。如果我得到一个值它按预期工作,但我希望我的方法返回多个值。例如
如果,Id1 = 1 and Id2 = 2
我想将其显示为1-2
或1_2
。我似乎无法弄清楚如何将连字符-
或下划线_
放在两个int
之间。我的代码在
public int GetId()
{
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
string userName = HttpContext.Current.User.Identity.Name;
UserInfo info = new UserInfo();
using (SqlCommand cmd = new SqlCommand("SELECT FirstId, SecondId FROM MyTable WHERE UserName=@userName"))
{
cmd.Parameters.AddWithValue("UserName", userName);
cmd.Connection = connection;
connection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
info.FirstId = reader.GetInt32(0);
info.SecondId = reader.GetInt32(1);
}
}
}
return info.FirstId + "_" + info.SecondId;
}
}
我的UserInfo
课程具有基本的Get and Set
属性。我今天才遇到Tuple
。我已尝试使用Tuple
,但我将值显示为(1,2)
。当然Tuple
我可以添加下划线_
或连字符-
,但问题是我无法删除括号()
和逗号{{ 1}}分隔值。有人可以指出我正确的方向。提前感谢您的帮助和支持。
答案 0 :(得分:2)
该方法声称返回int
:
public int GetId()
但有点尝试返回string
:
return info.FirstId + "_" + info.SecondId;
连字符或下划线表示它不再是数字数据类型,它现在只是一个字符串。因此,您必须将其作为字符串返回:
public string GetId()
{
// etc.
return string.Format("{0}_{1}", info.FirstId, info.SecondId);
}
如果您希望数据仍以某种方式构建,那么正如您所建议的那样Tuple<int, int>
可以解决问题:
public Tuple<int, int> GetId()
{
// etc.
return new Tuple<int, int>(info.FirstId, info.SecondId);
}
然后由消费代码决定如何显示它:
var id = GetId();
Console.Write(string.Format("{0}_{1}", id.Item1, id.Item2));
这也意味着您使用了非常不直观的名称,例如Item1
和Item2
。如果你想要更恰当地命名的东西,你可以引入一个自定义对象:
public class IDs
{
public int FirstId { get; set; }
public int SecondId { get; set; }
}
然后只返回一个实例。这种方法有一些额外的好处:
FirstId
和SecondId
重命名为更有意义的名称private
并添加接受值的构造函数来使对象不可变.ToString()
以使用下划线为其提供默认的string
表示例如:
public class IDs
{
public int FirstId { get; private set; }
public int SecondId { get; private set; }
private IDs() { }
public IDs(int firstId, int secondId)
{
FirstId = firstId;
SecondId = secondId;
}
public override string ToString()
{
return string.Format("{0}_{1}", FirstId, SecondId);
}
}
然后返回一个实例:
public IDs GetId()
{
// etc.
return new IDs(info.FirstId, info.SecondId);
}
使用代码只能按原样显示它,因为它的字符串表示是在内部定义的:
var id = GetId();
Console.Write(id);