2015-01-15 3 views
1

Я недавно начал работать с Tuple и я в настоящее время извлечения два значения из БД, которые являютсяСнять кронштейн() от возвращаемого значения

  1. Firstname
  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 [email protected]")) 
     { 
      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);, но все равно. Извините меня, если я упустил что-то довольно очевидное. Заранее спасибо за вашу помощь и поддержку

+1

Как вы используете возвращенный 'Tupl é'? – haim770

+0

Как вы выбираете значения из БД? Я уверен, что Tuple не добавляет лишнюю скобку, поэтому он должен быть уже внутри значения 'Firstname' или' Surname'. –

+0

@ haim770 Я показываю их на веб-странице – Code

ответ

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 или более свойствами, и мне нужно вернуть каждый из них мне нужно передать каждый в конструктор? – Code

+0

@ Код Хорошо, но это ничем не отличается от передачи их в кортеж с дополнительным преимуществом, которое вам не нужно помнить, что означает «Item5», потому что он будет называться «DogsName» или что-то еще. –

+0

Спасибо за это, это мне очень помогло – Code

3

(John, Smith) является результатом вызова ToString() из кортежей, имеющих «Джон», как Item1 и «Смит», как Item2.

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

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

+0

Спасибо за ваш ответ. – Code

Смежные вопросы