调用Func <T1,T2,T3>有哪些可选参数?

金宝

我有多种方法,它们具有两个可选参数,一个ConfigSourceType枚举和一个表示filePath的字符串,并返回“ IConfigFile”的实例(不同取决于配置文件)。

我正在尝试将这些方法作为Func传递,以便可以加载配置,但不能在没有参数的情况下调用委托。如果我使用Type.Missing,它仍然会抱怨缺少ConfigSourceType枚举。

编辑以包含代码:

DataHandler类:

    public IConfigFile RetrieveMyConfiguration(
        ConfigurationSourceType source = ConfigurationSourceType.Live,
        string fileName = "")
    {
         /* Irrelevant */
         return new ConfigFile();
    }

主要的:

    private void SomeMethod()
    {  
        var dHandler = new DataHandler();
        MyConfig = LoadConfigFile(dHandler.RetrieveMyConfiguration);
    }

    public IConfigFile LoadConfigFile(
            Func<ConfigurationSourceType, string, IConfigFile> func)
    {
        IConfigFile configFile;        
        // Line below doesn't compile:
        configFile = func.Invoke(null, Type.Missing);
        return configFile;
     }
拉瑟·卡尔森(Lasse V.Karlsen)

您不能为指定可选参数Func<...>,但可以为自己的委托指定参数

LINQPad示例显示了如何:

void Main()
{
    var t = new Test(XYZ);
    t();
    t(15);
}

public delegate void Test(int a = 10);

public void XYZ(int a)
{
    a.Dump();
}

输出:

10
15

但是,这意味着需要了解可选参数的是委托的接收端,但是似乎您想为方法指定委托并在发送端指定可选参数,或者从您包装在委托中的方法,除了创建匿名方法外,这是不可能的:

SomeMethod((a, b) => WrappedMethod(a, b, 42));

您可以执行以下操作:

public delegate void MyDelegate(int a, int b, int? c = null, int? d = null);

public void Method(int a, int b, int c = 10, int d = 42) { ... }

new MyDelegate((a, b, c, d) =>
{
    if (c.HasValue && d.HasValue)
        Method(a, b, c.Value, d.Value);
    else if (c.HasValue)
        Method(a, b, c.Value);
    else if (d.HasValue)
        Method(a, b, d: d.Value);
    else
        Method(a, b);
});

但是,这开始变得可笑了。

因此,不,您无法真正轻松地完成自己想要的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法理解如何编码Func <Func <T1,T2>,T3>

来自分类Dev

Oracle:从T1内部联接T2中选择,其中T3中的日期,但没有与T3相关的键

来自分类Dev

有没有办法将Func <T1,bool>映射到Func <T2,bool>?

来自分类Dev

是否可以为Func <T1,T2,....>参数的某些部分提供xml注释以实现智能感知?

来自分类Dev

将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

来自分类Dev

如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

来自分类Dev

无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

来自分类Dev

表达式<Func <T1,T2,TResult >>和Sql IN

来自分类Dev

将MemberInfo反射到Func <T1,T2>

来自分类Dev

我无法通过func <T1,T2>获得C#方法名称

来自分类Dev

如果T1和T2拥有std :: pair <T1,T2>不应该具有琐碎的默认构造函数?

来自分类Dev

将 T1 中当前不在 T2 中的所有行插入到 T2

来自分类Dev

如何将PowerShell函数传递给采用Func <T1,T2>的.NET方法?

来自分类Dev

数据库表的名称,例如t1,t2,t3等

来自分类Dev

为什么Tuple <T1,T2,T3>不继承自Tuple <T1,T2>?

来自分类Dev

将Dictionary <T1,T2>的所有内容添加到另一个Dictionary <T1,T2>(键和值的相等类型)的最简单方法?

来自分类Dev

os.difftime(t2,t1)有什么用途,t2-t1没有涵盖?

来自分类Dev

以Func <in T1,out TResult>作为参数的协方差/协方差

来自分类Dev

有关T1,T3,OC-3和OC-48的一些问题

来自分类Dev

如何使用 Func<string, T> 作为参数之一调用方法

来自分类Dev

当我们说T1比T2具有更多的多态性时,我们是什么意思?

来自分类Dev

如何在C#中使用未知数量和参数类型包装Func <T1 ... Tn>?

来自分类Dev

Func <T>是否获得每个调用的结果?

来自分类Dev

将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

来自分类Dev

Func <T,TResult>访问参数

来自分类Dev

有没有一种方法可以根据R中的一组条件,使用表T2中的列B更新表T1中的列A?

来自分类Dev

在WatchKit中没有调用func session(..)

来自分类Dev

有人可以说出为什么在成员函数的定义中使用这样的代码的原因:Base :: fool(T1 * pub,T2 * info){(void)pub; (void)info;}`

来自分类Dev

如何测试是否使用FakeItEasy框架调用了Func <T>?

Related 相关文章

  1. 1

    无法理解如何编码Func <Func <T1,T2>,T3>

  2. 2

    Oracle:从T1内部联接T2中选择,其中T3中的日期,但没有与T3相关的键

  3. 3

    有没有办法将Func <T1,bool>映射到Func <T2,bool>?

  4. 4

    是否可以为Func <T1,T2,....>参数的某些部分提供xml注释以实现智能感知?

  5. 5

    将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

  6. 6

    如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

  7. 7

    无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

  8. 8

    表达式<Func <T1,T2,TResult >>和Sql IN

  9. 9

    将MemberInfo反射到Func <T1,T2>

  10. 10

    我无法通过func <T1,T2>获得C#方法名称

  11. 11

    如果T1和T2拥有std :: pair <T1,T2>不应该具有琐碎的默认构造函数?

  12. 12

    将 T1 中当前不在 T2 中的所有行插入到 T2

  13. 13

    如何将PowerShell函数传递给采用Func <T1,T2>的.NET方法?

  14. 14

    数据库表的名称,例如t1,t2,t3等

  15. 15

    为什么Tuple <T1,T2,T3>不继承自Tuple <T1,T2>?

  16. 16

    将Dictionary <T1,T2>的所有内容添加到另一个Dictionary <T1,T2>(键和值的相等类型)的最简单方法?

  17. 17

    os.difftime(t2,t1)有什么用途,t2-t1没有涵盖?

  18. 18

    以Func <in T1,out TResult>作为参数的协方差/协方差

  19. 19

    有关T1,T3,OC-3和OC-48的一些问题

  20. 20

    如何使用 Func<string, T> 作为参数之一调用方法

  21. 21

    当我们说T1比T2具有更多的多态性时,我们是什么意思?

  22. 22

    如何在C#中使用未知数量和参数类型包装Func <T1 ... Tn>?

  23. 23

    Func <T>是否获得每个调用的结果?

  24. 24

    将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

  25. 25

    Func <T,TResult>访问参数

  26. 26

    有没有一种方法可以根据R中的一组条件,使用表T2中的列B更新表T1中的列A?

  27. 27

    在WatchKit中没有调用func session(..)

  28. 28

    有人可以说出为什么在成员函数的定义中使用这样的代码的原因:Base :: fool(T1 * pub,T2 * info){(void)pub; (void)info;}`

  29. 29

    如何测试是否使用FakeItEasy框架调用了Func <T>?

热门标签

归档