在两个int之间添加连字符或下划线

时间:2014-11-19 14:48:11

标签: c#

我想从数据库中获取一些Id。如果我得到一个值它按预期工作,但我希望我的方法返回多个值。例如

如果,Id1 = 1 and Id2 = 2我想将其显示为1-21_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}}分隔值。有人可以指出我正确的方向。提前感谢您的帮助和支持。

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));

这也意味着您使用了非常不直观的名称,例如Item1Item2。如果你想要更恰当地命名的东西,你可以引入一个自定义对象:

public class IDs
{
    public int FirstId { get; set; }
    public int SecondId { get; set; }
}

然后只返回一个实例。这种方法有一些额外的好处:

  • 您可以将FirstIdSecondId重命名为更有意义的名称
  • 您可以通过创建setter 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);