Bur*_*rst 1 .net c# generics reflection
有人可以解释为什么我看到我所看到的(下面控制台的屏幕截图)?对于 'ref' 和非 'ref' 方法参数,我从 Reflection 获得了不同的泛型相关属性。我正在使用 .NET 4.8(经典的 .NET Framework)。
public class MyClass {
public class Aref
{
public virtual void method(object je, ref List<MyClass> batchlist, object doc)
{
}
}
public class A
{
public virtual void method(object je, List<MyClass> batchlist, object doc)
{
}
}
private static void WriteGenericProps(Type type)
{
var method = type.GetMethod(nameof(Aref.method));
var param = method.GetParameters().First(p => p.Name == "batchlist");
Console.WriteLine(nameof(param.ParameterType.IsByRef) + "=" + param.ParameterType.IsByRef);
Console.WriteLine(nameof(param.ParameterType.IsGenericType) + "=" + param.ParameterType.IsGenericType);
Console.WriteLine(nameof(param.ParameterType.ContainsGenericParameters) + "=" + param.ParameterType.ContainsGenericParameters);
Console.WriteLine(nameof(param.ParameterType.IsConstructedGenericType) + "=" + param.ParameterType.IsConstructedGenericType);
Console.WriteLine(nameof(param.ParameterType.IsGenericParameter) + "=" + param.ParameterType.IsGenericParameter);
Console.WriteLine(nameof(param.ParameterType.IsGenericTypeDefinition) + "=" + param.ParameterType.IsGenericTypeDefinition);
}
static void Main(string[] args)
{
var t = typeof(Aref);
Console.WriteLine(t.Name);
WriteGenericProps(t);
Console.WriteLine();
t = typeof(A);
Console.WriteLine(t.Name);
WriteGenericProps(t);
}
}
Run Code Online (Sandbox Code Playgroud)
作为备注的IsGenericType说:
如果立即数类型不是泛型,则该
IsGenericType属性返回false。例如,元素类型为A<int>(A(Of Integer)在 Visual Basic 中)的数组本身不是泛型类型。
如果batchlist是 aList<MyClass>[]或指针,你会发现你得到相同的结果。
如果您有一个 by-ref 类型,则需要调用GetElementType()以获取基础类型。这给了你typeof(List<MyClass>),它的行为与你期望的一样。
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |