2

XmlReader.ReadElementContentAsObject()オブジェクトをシリアル化しようとしていますが、特定の型がまたはで使用できるかどうかを知りたいですReadElementContentAs()

これらのメソッドに渡すことができることがわかっているので、型が CLR 型であるかどうかを尋ねることはできますか?

if(myType.IsCLRType) // how can I find this property?
    myValue = _cReader.ReadElementContentAsObject();
4

3 に答える 3

3

私はこのリストを探していると思います: http://msdn.microsoft.com/en-us/library/xa669bew.aspx

おそらく、ほとんどの方法でType.GetTypeCode(type).

static readonly HashSet<Type> supportedTypes = new HashSet<Type>(
    new[] { typeof(bool), typeof(string), typeof(Uri), typeof(byte[]), ... });

で確認しsupportedTypes.Contains(yourType)ます。

あなたが念頭に置いている「このリスト」と正確に一致する魔法の定義済みリストはありません。たとえば、TypeCodeメモや.byte[]Uri

于 2013-03-08T10:37:47.110 に答える
1

おそらくそうです。CLRタイプをシステムコアタイプとして定義する場合。

間違っていたら削除します

public static class TypeExtension
{
    public static bool IsCLRType(this Type type)
    {
        var fullname = type.Assembly.FullName;
        return fullname.StartsWith("mscorlib");
    }
}

あるいは;

    public static bool IsCLRType(this Type type)
    {
        var definedCLRTypes = new List<Type>(){
                typeof(System.Byte),
                typeof(System.SByte),
                typeof(System.Int16),
                typeof(System.UInt16),
                typeof(System.Int32),
                typeof(System.UInt32),
                typeof(System.Int64),
                typeof(System.UInt64),
                typeof(System.Single),
                typeof(System.Double),
                typeof(System.Decimal),
                typeof(System.Guid),
                typeof(System.Type),
                typeof(System.Boolean),
                typeof(System.String),
                /* etc */
            };
        return definedCLRTypes.Contains(type);
    }
于 2013-03-08T10:32:15.573 に答える
1
bool isDotNetType = type.Assembly == typeof(int).Assembly;
于 2013-03-08T10:35:58.123 に答える