هذا الكائن هو نوع لا يتجزأ. هل يمكنني الحصول على قيمتها في أقل من خمسة أسطر من التعليمات البرمجية؟

StackOverflow https://stackoverflow.com/questions/631994

  •  08-07-2019
  •  | 
  •  

سؤال

ولدي القارئ البيانات. أريد أن مقارنة قيمة فيه بقيمة 42. وأنا أعلم أنه هو نوع لا يتجزأ (على سبيل المثال، ما يدعو الخلية INT، TINYINT، SMALLINT، MEDIUMINT، BIGINT، JUMBODELUXEINT، وما إلى ذلك). أنا لا أريد أن باستخدام الأسلاك نوع الفعلي في لC # رمز. أفضل ما قد حان حتى مع غير

object x = reader.GetValue(i);
uint k = x is byte ? (byte) x
    : x is short ? (uint) (short) x
    : x is ushort ? (ushort) x
    : x is int ? (int) (int) x
    : (uint) x;
if (k == 42) { ... }

وهذا يبدو منذ فترة طويلة ينضب بشكل لا يصدق. حاولت استخدام Equals لكن أنواع أساسية مختلفة مع نفس القيمة لا تظهر لاختبار على قدم المساواة.

هل هناك طريقة أفضل؟

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

المحلول

Convert.ToUInt32(object) ... نعم، أنه يعمل بشكل جيد:

using System;

class Test
{
    static void Main()
    {
        Check((byte)10);
        Check((short)10);
        Check((ushort)10);
        Check((int)10);
        Check((uint)10);
    }

    static void Check(object o)
    {
        Console.WriteLine("Type {0} converted to UInt32: {1}",
                          o.GetType().Name, Convert.ToUInt32(o));
    }
}

وبعبارة أخرى، يمكن أن الشفرة هي:

object x = reader.GetValue(i);
uint k = Convert.ToUInt32(x);
if (k == 42) { ... }

وبدلا من ذلك، بالنظر إلى أن جميع uints هي للتمثيل كما يتوق، إذا كنت تستخدم قارئ البيانات قد تتمكن من محاولة reader.GetInt64(i)؟ أنا لا أعرف مرتجلا ما إذا كان سيتم إجراء التحويل بالنسبة لك، لكنه ربما يستحق المحاولة.

نصائح أخرى

if(Convert.ToUInt32(reader.GetValue(i)) == 42) { ... }

هل يمكن أيضا القيام إجابات السكيت ودانيال في الاتجاه المعاكس مثل هذا:

if (k == Convert.ChangeType(42, k.GetType()) { ... }

وأنا لم نجرب ذلك على الرغم من.

ولست متأكدا إذا كنت فهمت بشكل صحيح، ولكن أعتقد أن هذا يجب أن تعمل:

int x = int.Parse(reader.GetValue(i).ToString());
if(x == 42) { // do your logic }

ويمكنك أن تجرب هذا:

unit k = Convert.ToUInt32(x);

وأنت سيكون أفضل عمل إعادة تسمية المتغيرات الخاصة بك، وإن كان. 1 إلكتروني المتغيرات <م> سوو الأسبوع الماضي .

وهذا يجب أن تعمل:

object x = reader.GetValue(i);

uint k;
try
{
    k = Convert.ToUInt32(x);
}
catch(InvalidCastException e) { ... }
if (k == 42) { ... }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top