0

オブジェクトが基本型 (char、int、var、string (これは C# の基本型ですか?)) であるかどうかを確認できるようにしたいと考えています。この理由は、オブジェクトのフィールドを取得するパーサーを作成したいためです。値を取得できないオブジェクトに遭遇した場合 (内部の別のオブジェクトの場合)、再帰的にフィールドを取得します。そこも。たとえば、次のようになります。

    for (int x = 0; x < elements.Length; x++)
    {
        FieldInfo currenField = fields[x];

        if (currenField is object) //This doesn't work because its of type "FieldInfo"
        {
            //pass in the current object into the function
        }
        else
        {
            elements[x] = new XElement(currenField.Name, currenField.GetValue(obj).ToString());
        }

残念ながら、オンラインで何かを見つけることができないようです。これにより、基本タイプかどうかを簡単に判断できます。次のこともできません。

      currenField.GetType is typeof(object)

TLDR; 何かが基本型であるかどうかを判断することも、型を比較して同じ効果を生み出すこともできません

どんな助けでも大歓迎です!

4

2 に答える 2

4

「基本型」と呼んでいるものは、実際にはプリミティブ型と見なされます。IsPrimitive次のプロパティを使用して、型がプリミティブ型かどうかを判断できます。

var type = currenField.GetType();
if(type.IsPrimitive)
    // Primitive type
else
    // Other type
于 2012-10-29T19:08:22.273 に答える
0

通常IsPrimitiveはこれで十分ですが、さらに情報が必要な場合はType.GetTypeCode()をお勧めします。

var typeCode = Type.GetTypeCode(currenField.GetType());

switch (typeCode)
{
    case TypeCode.Boolean:
        break;
    case TypeCode.Byte:
        break;
    case TypeCode.Char:
        break;
    case TypeCode.DBNull:
        break;
    case TypeCode.DateTime:
        break;
    case TypeCode.Decimal:
        break;
    case TypeCode.Double:
        break;
    case TypeCode.Empty:
        break;
    case TypeCode.Int16:
        break;
    case TypeCode.Int32:
        break;
    case TypeCode.Int64:
        break;
    case TypeCode.Object:
        break;
    case TypeCode.SByte:
        break;
    case TypeCode.Single:
        break;
    case TypeCode.String:
        break;
    case TypeCode.UInt16:
        break;
    case TypeCode.UInt32:
        break;
    case TypeCode.UInt64:
        break;
    default:
        break;
}
于 2012-10-29T19:37:13.187 に答える