在 C# 中是否可以将方法传递给可为空的 Func?
既不工作Func<A, bool>?
也不Func?<A, bool>
工作。
那没有意义。
所有引用类型,包括Func<...>
,都可以是null
。
可空类型适用于struct
通常不能是 的值类型 (s) null
。
Func 是一个委托,它是一个引用类型。这意味着它已经可以为空(您可以将 null 传递给方法)。
Func -> 封装返回泛型参数指定类型的方法
如果返回类型为 void,则存在不同的委托 (Action)
Action -> 封装一个不返回值的方法。
如果要求 Func 接受可以接受 null(可空类型)的参数,或者要求 Func 返回可能为 null(可空类型)的值,则没有限制。
例如。
Func<int?, int?, bool> intcomparer =
(a,b)=>
{
if(a.HasValue &&b.HasValue &&a==b)
return true;
return false;
} ;
Func<int?, int?, bool?> nullintcomparer =
(a,b)=>
{
if(a.HasValue &&b.HasValue &&a==b)
return true;
if(!a.HasValue || !b.HasValue)
return null;
return false;
} ;
var result1 = intcomparer(null,null); //FALSE
var result2 = intcomparer(1,null); // FALSE
var result3 = intcomparer(2,2); //TRUE
var result4 = nullintcomparer(null,null); // null
var result5 = nullintcomparer(1,null); // null
var result6 = nullintcomparer(2,2); //TRUE
所有引用类型,包括作为委托的 Func,默认情况下都可以为 null。
Func<T>
必须标记为Func<T>?
能够接收null
默认参数值。
/// <summary>
/// Returns an unique absolute path based on the input absolute path.
/// <para>It adds suffix to file name if the input folder already has the file with the same name.</para>
/// </summary>
/// <param name="absolutePath">An valid absolute path to some file.</param>
/// <param name="getIndex">A suffix function which is added to original file name. The default value: " (n)"</param>
/// <returns>An unique absolute path. The suffix is used when necessary.</returns>
public static string GenerateUniqueAbsolutePath(string absolutePath, Func<UInt64, string> getIndex = null)
{
if (getIndex == null)
{
getIndex = i => $" ({i})";
}
// ... other logic
}
/// <summary>
/// Returns an unique absolute path based on the input absolute path.
/// <para>It adds suffix to file name if the input folder already has the file with the same name.</para>
/// </summary>
/// <param name="absolutePath">An valid absolute path to some file.</param>
/// <param name="getIndex">A suffix function which is added to original file name. The default value: " (n)"</param>
/// <returns>An unique absolute path. The suffix is used when necessary.</returns>
public static string GenerateUniqueAbsolutePath(string absolutePath, Func<UInt64, string>? getIndex = null)
{
if (getIndex == null)
{
getIndex = i => $" ({i})";
}
// ... other logic
}