سؤال

ولدي المتغيرات التالية:

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

والآن أنا بحاجة الى ايجاد نوع بيانات كل سلسلة أي نوع البيانات التي يمكن تحويله في حالة إزالة العملات. هنا هو ما أود لكل متغير على اعتناق:

<اقتباس فقرة>   

وstr1 - صحيح
  str2 - سلسلة
  str3 - مزدوج
  str4 - شار

ملحوظة: إذا كانت السلسلة قد حرف واحد يجب أن يكون شار، على الرغم من سلسلة يمكن أن يكون حرف واحد، وأنا الاقتصار

ومعلوماتك: يتم الحصول على هذه القيم من DataGrid حيث كنت دخلت القيم يدويا. لذلك كل شيء أصبح السلسلة. هل هناك أي طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

استخدام البيانات الفوقية ، أو إذا استطعت

وهذا لديك لتخمين ما هي أنواع البيانات، ليست فكرة جيدة.

وشيئين

1 أين هو البيانات القادمة من؟

إذا انها قاعدة بيانات، هل أنت متأكد انهم السلاسل؟ إذا كانت قاعدة بيانات، يجب أن يكون هناك وعادت بعض البيانات الفوقية التي سوف اقول لكم ما هي أنواع البيانات من الحقول.

واذا كان ملف XML، هناك مخطط محددة من شأنها أن تعطيك أنواع؟

2 إذا كان لديك على مواصلة تخمين.

كن على علم أنه يمكن أن يكون السلاسل التي يحدث أن تكون الأرقام، ولكن هي تماما سلاسل صالحة منها مثلا أرقام الهواتف وأرقام حساب مصرفي، التي هي أفضل تعبير كسلاسل. أيضا هذه الأرقام يمكن أن يكون العديد من الأرقام، إذا كنت تحويلها إلى الزوجي قد تفقد بعض الأرقام إلى العائمة أخطاء نقطة (يجب أن تكون موافق تصل إلى 14 أو 15 أرقام)

وأنا متأكد من الآن - السبب لقد اتخذت وقتي كتابة هذا - هناك الكثير من الإجابات أقول لك كيفية القيام بذلك (أي tryparse كثافة العمليات أولا، ثم انقر نقرا، ثم طول اختبار لشار، إن لم يكن ثم انها سلسلة الخ)، ولكن إذا كنت أنت، فما استقاموا لكم فاستقيموا حاول أن لا تفعل ذلك، ومعرفة ما إذا كان هناك أي طريقة يمكنك الحصول عليها، أو تمرير بعض الفوقية البيانات التي سوف اقول لكم ما اكتبه على هو وليس فقط ما اكتبه <م> قد أن

نصائح أخرى

وبطبيعة الحال، ليس هناك طريقة محددة للقيام بذلك، ولكن إذا قمت بإنشاء قائمة أنواع البيانات التي تريد الاختيار أمر حسب الأولوية، ثم شيئا من هذا القبيل قد تفعل خدعة.

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;
}

ومجرد استدعاء هذه الدالة على كل سلسلة، ويجب أن يكون نوع appropiate من وجوه عاد. ويمكن لفحص نوع بسيط ثم اقول لكم كيف تم تحليل السلسلة.

استخدم طريقة TryParse من كل نوع.

لا يوجد أي بني في طريقة للقيام بذلك، يمكنك محاولة TryParse على أنواع العدد مع زيادة الدقة، لكنه لن يضمن أن يكون الحق.

وأفضل رهان ما تكون لمعالجة ذلك وكأنك يدويا. أي هل هناك مكان عشري؟ لا - ثم في عدد صحيح. كم حجم؟ هو سلبي؟

ونوع بيانات لكل من هذه العناصر هو السلسلة. إذا كنت ترغب في محاولة لتحليل منهم إلى أنواع مختلفة يمكنك استخدام Int32.TryParse، Double.TryParse، وما إلى ذلك أو يمكنك استخدام التعبيرات المنتظمة:

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