문제

다음 변수가 있습니다.

string str1 = "1";
string str2 = "asd";
string str3 = "3.5";
string str4 = "a";

이제 각 문자열의 데이터 유형을 찾아야합니다. 즉, 따옴표가 제거되면 변환 할 수있는 데이터 유형을 찾아야합니다. 다음은 각 변수를 변환하려는 내용입니다.

str1- 정수
str2- 문자열
str3- 이중
str4- 숯

참고 : 문자열에 단일 문자가 있으면 문자열에는 단일 문자를 가질 수 있지만 제한하고 있습니다.

참고 :이 값은 수동으로 입력 한 Datagrid에서 얻습니다. 그래서 모든 것이 끈이되고 있습니다. 이것을 할 방법이 있습니까?

도움이 되었습니까?

해결책

메타 데이터를 사용하십시오, 가능하다면

데이터 유형이 무엇인지 추측해야한다는 것은 좋은 생각이 아닙니다.

두가지

1 데이터는 어디에서 왔습니까?

데이터베이스라면 문자열이 확실합니까? 데이터베이스 인 경우 필드의 데이터 유형이 무엇인지 알려주는 메타 데이터가 반환되어야합니다.

XML 파일 인 경우 유형을 줄 수있는 스키마가 있습니까?

2 계속 추측해야한다면.

숫자로 발생하는 문자열을 가질 수는 있지만, 문자열로 가장 잘 표현되는 전화 번호, 은행 Acount 번호 (은행 Acount 번호)를 완벽하게 유효한 문자열 일 수 있습니다. 또한이 숫자는 많은 자리를 가질 수 있습니다. 두 배로 변환하면 부동 소수점이 부정확 한 숫자로 약간의 숫자를 풀 수 있습니다 (최대 14 또는 15 자리까지 괜찮을 것입니다).

지금까지 확신합니다.이를 입력하는 데 시간이 걸렸 으니까 -이 작업을 수행하는 방법을 알려주는 많은 답이 있습니다 (예 : Tryparse int 먼저, 두 배, 숯의 테스트 길이, 그렇지 않으면 문자열 등이 있습니다. ),하지만 내가 당신이라면, 나는 그렇게하지 않으려 고 노력하고, 당신이 얻을 수있는 방법이 있는지 확인하거나 어떤 유형의 메타 데이터를 전달할 수 있는지 확인하십시오. 이다 그리고 어떤 유형의 것이 아닙니다 ~할 것 같다 ~이다

다른 팁

물론이 작업을 수행 할 수있는 확실한 방법은 없지만 우선 순위로 주문한 데이터 유형 목록을 작성하면 이와 같은 작업이 트릭을 수행 할 수 있습니다.

object ParseString(string str)
{
    int intValue;
    double doubleValue;
    char charValue;
    bool boolValue;

    // Place checks higher if if-else statement to give higher priority to type.
    if (int.TryParse(str, out intValue))
        return intValue;
    else if (double.TryParse(str, out doubleValue))
        return doubleValue;
    else if (char.TryParse(str, out charValue))
        return charValue;
    else if (bool.TryParse(str, out boolValue))
        return boolValue;

    return null;
}

각 문자열 에서이 함수를 호출하면 적절한 유형의 객체를 반환해야합니다. 그런 다음 간단한 유형 검사를 통해 문자열이 어떻게 구문 분석되었는지 알 수 있습니다.

사용 TryParse 각 유형의 방법.

이 작업을 수행하는 방법은 없습니다. 정밀도가 높아지는 숫자 유형에 대해 TryParse를 시도 할 수는 있지만 옳다고 보장하지는 않습니다.

당신의 최선의 방법은 당신이 수동으로 처리하는 것처럼 그것을 처리하는 것입니다. 즉, 소수점이 있습니까? 아니 - 그럼 정수입니다. 얼마나 큰? 부정적입니까?

이러한 각 항목의 데이터 유형은 문자열입니다. 다른 유형으로 구문 분석하려면 int32.tryparse, double.tryparse 등을 사용할 수 있습니다. 그렇지 않으면 Regex를 사용할 수 있습니다.

bool isInt = new Regex(@"^\d+$").IsMatch(str);
bool isDouble = !(isInt) && new Regex(@"^\d+\.\d+$").IsMatch(str);
bool isChar = !(isInt || isDouble) && new Regex(@"^.$").IsMatch(str);
bool isString = !(isInt || isDouble || isChar);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top