2013-01-02 2 views
0

true 또는 false를 확인하고 내 언어를 다른 클래스로 보내는 기능을 사용할 수 있습니까? 다른 클래스에 변수 보내기

내가 시도 :

public class Func 
{ 
    public static bool CheckDate(string number) 
    { 
     string new_number = number.ToString(); 
     if (new_number.Length==8) 
     { 
      string yyyy = new_number.Substring(0, 4); 
      string mm = new_number.Substring(4, 2); 
      string dd = new_number.Substring(6, 2); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

내가 보낼 구두 yyyy, 내 Program.cs 클래스에 mm, dd.

어떻게해야합니까?

+1

질문에 더 의미있는 제목을 선택하십시오. –

+1

예, 보낼 수 있습니다. CheckDate에서 여러 값을 반환하는 것에 대해 묻고 있습니까? – ryadavilli

답변

7

바퀴를 다시 열지 마십시오.이 목적으로 특별히 제작 된 DateTime.TryParseExact 방법을 사용하십시오.

public static bool CheckDate(string number, out DateTime date) 
{ 
    return DateTime.TryParseExact(number, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date); 
} 

을 그리고 당신은 정의 볼 수는 이미 BCL에 존재하기 때문에 지금 CheckDate 좀 의미가됩니다 : 당신은 .NET 프레임 워크에서 날짜를 처리 할 때 정규 표현식에와 문자열 잊어 버려요. 당신은 단순히 다음과 같이 사용합니다 :

string number = "that's your number coming from somewhere which should be a date"; 
DateTime date; 
if (DateTime.TryParseExact(
    number, 
    "dd/MM/yyyy", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out date 
)) 
{ 
    // the number was in the correct format 
    // => you could use the days, months, from the date variable which is now a DateTime 

    string dd = date.Day.ToString(); 
    string mm = date.Month.ToString(); 
    string yyyy = date.Year.ToString(); 
    // do whatever you intended to do with those 3 variables before 
} 
else 
{ 
    // tell the user to enter a correct date in the format dd/MM/yyyy 
} 

UPDATE : 나는 실제로 질문에 대답하고 있지 않다 코멘트 섹션에서 발언을 가지고 있기 때문에

, 당신은 유사한 접근 방법을 사용할 수 있습니다 하나는 내가 권 해드립니다. 하지만 제발, 과 같은 코드를 쓰지 않겠다고 약속 해주세요.은 TryXXX 패턴을 보여주기위한 것입니다.

는 모델 정의

public static bool CheckDate(string number, out Patterns patterns) 
{ 
    patterns = null; 
    string new_number = number.ToString(); 
    if (new_number.Length == 8) 
    { 
     Patterns = new Patterns 
     { 
      YYYY = new_number.Substring(0, 4), 
      MM = new_number.Substring(4, 2), 
      DD = new_number.Substring(6, 2) 
     } 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

이 같이 사용할 수 있습니다 :

string number = "that's your number coming from somewhere which should be a date"; 
Patterns patterns; 
if (CheckDate(numbers, out patterns) 
{ 
    string dd = patterns.DD; 
    string mm = patterns.MM; 
    string yyyy = patterns.YYYY; 
    // do whatever you intended to do with those 3 variables before 
} 
else 
{ 
    // tell the user to enter a correct date in the format dd/MM/yyyy 
} 
+0

아주 좋은 답변입니다.그래도 그의 질문에 대답하지는 못합니다 :) –

+0

예, 실제로 4 가지의 upvotes가 답을 해줍니다. 너 똑똑하다. – phaazon

+2

OP가 원래 문제를 해결할 수있는 방법을 설명하기 위해 답을 업데이트했습니다. 물론 업데이트 된 답변에 표시된 것과 같은 코드를 절대 작성해서는 안됩니다. 그것은 단지 삽화를위한 것입니다. StackOverflow는 단지 맹목적으로 질문에 대답하는 것이 아님을 알아야합니다. 그것은 OP가 실제로 풀려고하는 문제에 대한 최선의 대안을 제공하기위한 것입니다. 그리고 여러분이 실제 문제가 무엇인지 이해하지 못했을 경우, 저는 여러분에게 말하겠습니다 : 그는 문자열을 파싱하여 날짜 인스턴스로 만들고이 파싱이 성공하면 일, 월, 년을 사용하려고합니다. –

0

public class Patterns 
{ 
    public string DD { get; set; } 
    public string MM { get; set; } 
    public string YYYY { get; set; } 
} 

와는 out 매개 변수를 보내도록 다음 CheckDate 방법을 수정 CheckDate 기능의 목표는 날짜가 유효한지 확인하는 것입니다. 진부한 부작용을 일으키지 마십시오. 실제로 원하는 물건에 물건을 보내는 또 다른 기능을 작성하십시오.

문자열이 날짜인지 확인하려면 CheckDate에서 확인하십시오.

문자열이 날짜라는 것을 알고 있으면 ExtractDateElem 함수를 통해 원하는 날짜 요소를 추출하지만 부작용은 없으시기 바랍니다. 아래로 변수를 선언해야

-1

...

public static string yyyy; 
public static string mm ; 
public static string dd ; 

또는 당신의 필요에 따라

protected static string yyyy; 
protected static string mm ; 
protected static string dd ; 

하고 program.cs 파일이 어디에 따라 ...

관련 문제