- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试检查以下内容
typeof( ICollection<> ).GetTypeInfo().IsAssignableFrom( targetProperty.PropertyType.GetTypeInfo() )
参数传递给 IsAssignableFrom
的地方是一个 IList<Something>
.但它返回 false。
以下也返回 false。
typeof( ICollection<> ).GetTypeInfo().IsAssignableFrom( targetProperty.PropertyType.GetTypeInfo().GetGenericTypeDefinition() )
即使是以下内容也返回 false。
typeof( ICollection<> ).GetTypeInfo().IsAssignableFrom( typeof(IList<>) )
后者不应该返回 true 吗?
当 targetProperty.PropertyType
时,我怎样才能得到正确的结果?可以是任何类型吗?它可能是 List<T>
, 一个 ObservableCollection<T>
, 一个 ReadOnlyCollection<T>
、自定义集合类型等。
最佳答案
您有两个开放的通用类型。 IsAssignableFrom
将这些解释为询问是否 ICollection<T1>
可从 IList<T2>
分配.一般来说,这是错误的。仅当 T1 = T2 时为真。您需要做一些事情来关闭具有相同类型参数的泛型类型。您可以将类型填写为object
或者您可以获得通用参数类型并使用它:
var genericT = typeof(ICollection<>).GetGenericArguments()[0]; // a generic type parameter, T.
bool result = typeof(ICollection<>).MakeGenericType(genericT).IsAssignableFrom(typeof(IList<>).MakeGenericType(genericT)); // willl be true.
好像GetGenericArguments
在 PCL 中不可用,其行为不同于 GenericTypeArguments
属性(property)。在 PCL 中,您需要使用 GenericTypeParameters
:
var genericT = typeof(ICollection<>).GetTypeInfo().GenericTypeParameters[0]; // a generic type parameter, T.
bool result = typeof(ICollection<>).MakeGenericType(genericT).GetTypeInfo().IsAssignableFrom(typeof(IList<>).MakeGenericType(genericT).GetTypeInfo()); // willl be true.
关于c# - typeof(ICollection<>).GetTypeInfo().IsAssignableFrom(typeof(IList<>)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18937119/
下面的代码是演示问题的原始代码的精简版本。在 dotnetcore (1.0.1) 中,.IsEnum 属性被移动到 System.Reflection。我进行了所有按预期工作的更改。但是,我无法使用
我正在重写一些使用反射为 .NET Standard 1.4 编译的代码(目前针对 .NET 4.5.2。)。因此,我需要在许多地方对类型使用 GetTypeInfo()。 为了正确处理边缘情况,我的
我正在尝试查找有关 IDispatch 接口(interface)是否抛出的信息,特别是 IDispatch::GetTypeInfo() 是否抛出。 IIRC,IDispatch::Invoke()
我正在尝试检查以下内容 typeof( ICollection<> ).GetTypeInfo().IsAssignableFrom( targetProperty.PropertyType.GetT
我尝试将嵌入式资源(Windows 8.1 商店应用程序中的字体文件)作为字节流读取,但问题是对资源文件的访问。我经常用 typeof(Type).GetTypeInfo.Assembly.GetMa
新的 .NET4.5 API 在 IntrospectionExtensions 类中具有以下逻辑 public static TypeInfo GetTypeInfo(this Type type)
我在 COM dll(C#、.NET 框架 v2)中有以下函数: public void Leak(object jsObject) { Type comType; IDispatch
我试图从 ObjectCreationExpressionSyntax 对象获取类型信息但失败了。 这是重现问题的示例(请参阅代码中的“ti.Type is null”): using Microso
我是一名优秀的程序员,十分优秀!