2

次のようなメソッドシグネチャを使用します。

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

私はtypeof(TestInterface).GetMethods()[1].GetParameters()[0].ParameterTypeタイプを取得するために使用していて、それからチェックIsGenericTypeして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を簡潔に実行する方法が示されています。 -nullable-value-type

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 に答える