Nullable Func <t,tresult =“”> </t,>

时间:2012-05-15 14:44:28

标签: c# func

在C#中,是否可以将方法传递给可空的Func?

Func<A, bool>?Func?<A, bool>都无效。

4 个答案:

答案 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)

C#1.0-7.x:

所有引用类型(包括Func作为委托)在默认情况下可以为空。

C#> 8.x:

Func<T>必须标记为Func<T>?才能接收null作为默认参数值。

C#1.0-7.x的示例:

/// <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
}

> C#8.x的示例:

/// <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
}