我有一个通用的方法,需要保证该方法返回
我的方法如下:
nullable<T>
(例如源是 List<int>
或 List<int?>
必须返回 int?
),我想返回null而不是默认值(例如int的默认值为0。在这种情况下,我想返回null)。可以对类型参数添加约束(https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters),但采用这种方法,我必须拥有两个方法(其中一个带有struct约束,另一个带class约束)。我的方法如下:
public static T? ElementOrNull<T>(List<T> source, int? index)
{
if (source == null || index == null || source.Count <= index)
return null;
return source[index.Value];
}
我尝试使用 Convert.ChangeType()
和反射 (Activator.CreateInstance()
和 Activator.CreateInstance<T?>()
) 但是无法解决这个问题。
任何反馈都将不胜感激。谢谢!
注意:我查看了所有有关泛型和类型转换的StackOverflow问题,但它们没有帮助到我。
T?
,它是Nullable<T>
的简写,另一个是T
。尽管它们不能共存,因为名称和输入参数是相同的。 - ProgrammingLlamaint?
实际上是System.Nullable<int>
,所以您需要使用2种方法。如果T
是一个类,则必须返回原始的T
,但如果T
是一个结构体,则必须返回包装器Nullable<T>
。这无法在 .NET 的类型系统中表达。 - JL0PDList<T>
中包含null
(即List<T?>
),这两个方法将成为有效的重载。 - Theraot