2

使用方法签名,例如:

public interface TestInterface
{
    void SampleMethodOut(out int? nullableInt);
    void SampleMethod(int? nullableInt);
}

typeof(TestInterface).GetMethods()[1].GetParameters()[0].ParameterType用来获取类型,然后检查IsGenericTypeand Nullable.GetUnderlyingType。如何使用带有 out 参数的方法执行此操作?

4

2 回答 2

3

呵呵,忽略我之前的回答。

您使用Type.IsByRef, 并调用,Type.GetElementType()如果是这样:

var type = method.GetParameters()[0].ParameterType;
if (type.IsByRef)
{
    // Remove the ref/out-ness
    type = type.GetElementType();
}
于 2012-04-05T16:15:04.723 回答
1

对于刚刚找到此页面的每个人

c# 文档页面显示了一种简洁的方式来做到这一点
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types#how-to-identify-a -可空值类型

Console.WriteLine($"int? is {(IsNullable(typeof(int?)) ? "nullable" : "non nullable")} type");
Console.WriteLine($"int is {(IsNullable(typeof(int)) ? "nullable" : "non-nullable")} type");

bool IsNullable(Type type) => Nullable.GetUnderlyingType(type) != null;

// Output:
// int? is nullable type
// int is non-nullable type

使用反射,这是您获取参数类型的方式:

typeof(MyClass).GetMethod("MyMethod").GetParameters()[0].ParameterType;
于 2019-11-14T03:05:43.540 回答