Удалить скобку () из возвращаемого значения

1

Недавно я начал работать с Tuple и в настоящее время я извлекаю два значения из базы данных, которые

  1. Имя
  2. Фамилия

Моя функция имеет базовый SQL запрос для выбора имен из БД

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>

Функция возвращает значения, как ожидалось, однако, похоже, они помещаются в скобки, как следует (John, Smith). Я хочу знать, есть ли в любом случае я могу удалить () вокруг значений?

Я попытался return new Tuple<string, string>(FirstName, Surname); но он все тот же. Извините меня, если я упустил что-то довольно очевидное. Заранее благодарим за вашу помощь и поддержку

  • 1
    Как вы используете возвращенный Tuple ?
  • 0
    Как вы выбираете значения из БД? Я уверен, что Tuple не добавляет никаких дополнительных скобок, поэтому он должен быть уже внутри значения Firstname или Surname .
Показать ещё 5 комментариев
Теги:

2 ответа

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);
}
  • 0
    Спасибо за ваше предложение, предположим, что класс имеет 10 или более свойств, и мне нужно вернуть каждое из них. Нужно ли передавать каждое из них в конструктор?
  • 0
    @Code Хорошо, да, но это ничем не отличается от передачи их кортежу с дополнительным преимуществом: вам не нужно помнить, что означает «Item5», потому что он будет называться «DogsName» или что-то еще.
Показать ещё 1 комментарий
3

(John, Smith) является результатом вызова ToString() Tuple с "John" как Item1 и "Smith" как Item2.

Вероятно, вы показываете где-то вы кортеж точно так же, как и GetName() поэтому ToString() называется неявным.

Поэтому просто избегайте ситуации, когда ToString() можно назвать неявным и явно использовать yourTuple.Item1 и yourTuple.Item2.

  • 0
    Спасибо за Ваш ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню