在C#中,是否可以将方法传递给可空的Func?
Func<A, bool>?
和Func?<A, bool>
都无效。
答案 0 :(得分:18)
这没有意义。
所有参考类型(包括Func<...>
)都可以是null
。
Nullable类型适用于值类型(struct
s),通常不能null
。
答案 1 :(得分:4)
Func是一个委托,它是一个引用类型。这意味着它已经可以为空(您可以将null传递给方法)。
答案 2 :(得分:1)
Func - &gt;封装返回泛型参数
指定的类型的方法如果返回类型为void,则有一个不同的委托(Action)
Action - &gt;封装不返回值的方法。
如果要求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
答案 3 :(得分:0)
所有引用类型(包括Func作为委托)在默认情况下可以为空。
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
}