C# 重载参数受约束的函数或在其他地方找到方法
我正在尝试编写一个名为NotNull的函数,它的工作方式类似于“.” 例如:C# 重载参数受约束的函数或在其他地方找到方法,c#,C#,我正在尝试编写一个名为NotNull的函数,它的工作方式类似于“.” 例如: a.NotNull( x => x.AFunc ) 如果a为null,则NotNull返回AFunc的泛型类型,否则NotNull返回AFunc的返回值 我写过: public static TReturn NotNullClass<TObject, TReturn>(this TObject obj, Func<TObject, TReturn> func) where TReturn
a.NotNull( x => x.AFunc )
如果a为null,则NotNull返回AFunc的泛型类型,否则NotNull返回AFunc的返回值
我写过:
public static TReturn NotNullClass<TObject, TReturn>(this TObject obj, Func<TObject, TReturn> func) where TReturn : class
{
if (obj == null)
{
return null;
}
else
{
return func(obj);
}
}
public static TReturn NotNullStruct<TObject, TReturn>(this TObject obj, Func<TObject, TReturn> func) where TReturn : struct
{
if (obj == null)
{
return new TReturn();
}
else
{
return func(obj);
}
}
public static TReturn NotNullClass(这个TObject对象,Func Func),其中TReturn:class
{
if(obj==null)
{
返回null;
}
其他的
{
返回函数(obj);
}
}
公共静态TReturn NotNullStruct(此TObject对象,Func Func),其中TReturn:struct
{
if(obj==null)
{
返回新的TReturn();
}
其他的
{
返回函数(obj);
}
}
问题在于,如果TReturn是类或结构,则无法通过重载或静态测试将两个函数重新组合到一个泛型函数中
如何仅使用一个泛型函数编写此函数?公共静态树返回NotNull(这是TObject obj,Func Func)
public static TReturn NotNull<TObject, TReturn>(this TObject obj, Func<TObject, TReturn> func)
{
if (object.ReferenceEquals(obj, null))
{
return default(TReturn);
}
return func(obj);
}
{
if(object.ReferenceEquals(obj,null))
{
返回默认值(TReturn);
}
返回函数(obj);
}
此扩展方法可用于引用类型和值类型(对于ToObject)。对于值类型(结构),条件始终为true,并将调用给定的func
由于
default(TReturn)
此方法也适用于TReturn的引用和值类型。在这种情况下,“default”做得很好,ty。但我想知道是否有一种方法可以解决这种重载…类的默认值等于null您不需要两个不同的版本。