Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在两个int之间添加连字符或下划线_C# - Fatal编程技术网

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

C# 在两个int之间添加连字符或下划线,c#,C#,我正试图从数据库中获取一些Id。如果我得到一个值,它将按预期工作,但是我希望我的方法返回多个值。比如说 如果,Id1=1和Id2=2我想将其显示为1-2或1\u 2。我似乎不知道如何将连字符-或下划线-放在两个int之间。我的代码在下面 public int GetId() { using (SqlConnection connection = new SqlConnection(ConnectionString)) { string userName = Ht

我正试图从数据库中获取一些Id。如果我得到一个值,它将按预期工作,但是我希望我的方法返回多个值。比如说

如果,
Id1=1和Id2=2
我想将其显示为
1-2
1\u 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和Set
属性。我今天只遇到了
Tuple
。我尝试使用
元组
,但得到的值显示为
(1,2)
。使用
元组
时,我当然可以添加下划线
\uu
或连字符
-
,但问题是我无法去掉括号
()
和分隔值的逗号
。谁能给我指一下正确的方向吗。提前感谢您的帮助和支持。

该方法声明返回一个
int

public int GetId()
但是尝试返回一个
字符串

return info.FirstId + "_" + info.SecondId;
连字符或下划线表示它不再是数字数据类型,现在只是字符串。因此,您必须将其作为字符串返回:

public string GetId()
{
    // etc.

    return string.Format("{0}_{1}", info.FirstId, info.SecondId);
}
如果您希望数据仍然以某种方式结构化,那么正如您所建议的那样,
Tuple
将起到以下作用:

public Tuple<int, int> GetId()
{
    // etc.

    return new Tuple<int, int>(info.FirstId, info.SecondId);
}
这也意味着您将使用非常不直观的名称,如
Item1
Item2
。如果您想要更合适的名称,可以引入自定义对象:

public class IDs
{
    public int FirstId { get; set; }
    public int SecondId { get; set; }
}
然后返回一个实例。这种方法还有一些额外的优点:

  • 您可以将
    FirstId
    SecondId
    重命名为更有意义的名称
  • 您可以通过使setter
    private
    并添加接受值的构造函数来使对象不可变
  • 您可以重写
    .ToString()
    ,为其提供带有下划线的默认
    字符串表示形式
例如:

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

整数不能有下划线。如果要返回2个值,为什么不直接返回已填充的
UserInfo
实例呢?如果希望将其作为字符串,则方法的返回类型不应是int。如果方法返回int和
int
,但如果将其与“u”或“-”连用,则有一个字符串。此外,为什么不返回一个
列表
或一个数组,或者只返回UserInfo呢?您可以创建自己的类似于Tuple的类,并重写它的ToString方法。如果您解释了为什么要这样做,会更容易帮助您。有两个ID并尝试将它们连字符似乎比较奇怪。非常感谢您提供的详细答案。
var id = GetId();
Console.Write(id);