2016-07-29 2 views
0

OOP와 C#을 처음 사용했습니다. 이튜플을 반환하는 C# (파이썬처럼)

#Python 

def outputSmth(): 
    num1 = 3 
    num2 = 3 
    str1 = "Hi" 

    return (num1, num2, str1) #Returning a tuple that can later be accessed 
           # by index 

에 대한 C#에서 동등한은 내가 할 수있는 가장 적절한 방법은 무엇이며,이 의심되는 직접 해당이없는 경우가 나는 강한 파이썬 배경을 가지고 궁금 해서요?

//C#  
static tuple PrintUserCreationMnu() 
    { 
     Console.Clear(); 
     Console.WriteLine("---- Create the user ----\n"); 
     Console.Write("User ID    : "); string usrID = Console.ReadLine(); 
     Console.Write("First Name   : "); string f_Name = Console.ReadLine(); 
     Console.Write("Last Name    : "); string l_Name = Console.ReadLine(); 
     Console.Write("Expected leaving date : "); string l_Date = Console.ReadLine(); 

     return ; //Here I'd like to return all my inputted values 
    } 

감사합니다 :

여기 내 기능입니다!

답변

1

당신은 단순히 반환 할 수있는 string[] 또는 List<string> :

static string[] PrintUserCreationMnu() 
{ 
     // ... 
    return new[]{ usrID, f_Name, l_Name, l_Date}; 
} 

그러나 일반적으로는 의미있는 특성을 가진 사용자 정의 유형 User을 만들고 해당를 반환 좋을 것이다. 그런 다음 속성을 통해 대신 인덱스로 액세스 할 수 있습니다 :

static User PrintUserCreationMnu() 
{ 
     // ... 
    return new User{ UserId = usrID, FirstName = f_Name, LastName = l_Name, Date = l_Date}; 
} 

더 나은

Id 및 날짜에 대한 DateTime에 대한 올바른 유형, int을 사용하는 것입니다. ...TryParse 방법 (fx. int.TryParse)을 사용하면 형식이 유효한지 확인할 수 있습니다. 완성도를 위해서

는, 그래, .NET은 tuples 있습니다. 하지만 Item4이 무엇인지 확실하지 않기 때문에 자주 사용하지 않을 것입니다. 그가 소스 코드를보기 전에는 아무도 모른다. 따라서 메서드에서 반환하는 것이 좋은 유형이 아닙니다 (심지어 public 인 경우 더 적음). 그러나 여기에 있습니다 :

static Tuple<string, string, string, string> PrintUserCreationMnu() 
{ 
     // ... 
    return Tuple.Create(usrID, f_Name, l_Name, l_Date); 
} 
+0

내 ID 정말 ID가 U001ABCD 같은 포맷으로 문자열 할 필요가 있지만, 그래 난 사용자 클래스를 만들 것이라 생각합니다. – Gaboik1

+0

@ Gaboik1 : C# 튜플을 표시하기 위해 내 대답을 편집했음을 유의하십시오. –

+0

"문자열 [] 또는 List "을 반환 할 수 있습니다. 이것은 OP를 추가하지 않고 OP의 질문에 숫자 형식을 제공하지 않습니다. –

0

튜플이 C# 7 (현재 6.0 임)에 있습니다. 그래서 불행히도 아직 없습니다.

(특히 하나의 매개 변수를 반환하는 메서드를 처리 할 때 (처리 할 구조체를 설정하지 않고) 기다릴 수 없습니다.

은 지금 당신은 List, Dictionary 또는 Tuple 형처럼 뭔가를 반환해야하지만 당신은 새에 그들을 가지고 전화에서 그들을 수신에 다음 떨어져 메서드 호출 및 휴식에서 그들을 조립. 또한 이러한 구조체의 대부분에서 단일 유형으로 제한되므로 object와 같은 항목을 상자 안팎으로 상자에 넣어야합니다. 약간의 고통!

C# 7.0 기능에 대한 자세한 내용은 here을 참조하십시오.

여러분의 최선의 선택은 동적 expando 객체가 될 것이라고 생각합니다. 나는 그것이 할 수있는 최선의 두려움이다!

방법 :

public object GetPerson() 
{ 
    // Do some stuff 
    dynamic person = new ExpandoObject(); 
    person.Name = "Bob"; 
    person.Surname = "Smith"; 
    person.DoB = new DateTime(1980, 10, 25); 
    return person; 
} 

전화는 :

dynamic personResult = GetPerson(); 
string fullname = personResult.Name + " " + personResult.Surname; 
DateTime dob = personResult.DoB; 
+0

예, 고통 스럽습니다. 그리고 링크에 감사드립니다! C# 7은 언제 나오겠습니까? – Gaboik1

+0

대략적인 추측은 6-12 개월입니다. 다음은 관련된 비트를 설명하는 스레드입니다. http://www.strathweb.com/2016/03/enabling-c-7-features-in-visual-studio-15-preview/ –

+0

더 나은 - 여기 링크가 있습니다. 로드맵! https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md –

관련 문제