C#Func<>参数类型

时间:2015-03-04 18:00:39

标签: c# string func

  

我正在尝试" Func"一行。

    Func<int, string[], bool>(myFunc); //works OK
    Func<string[], bool>(myFunc); //Exception ???
  

未处理的异常:System.ArgumentException:       System.String&#39;的对象无法转换为&#39; System.String []&#39;。       看起来像&#34; Func&#34;不喜欢参数类型&#34;字符串[]&#34; ?!?&#34;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, Delegate> commandHash = new Dictionary<string, Delegate>();
            commandHash.Add("Test", new Func<string[], bool>(Test));
            string[] str = { "justtext" };

            try
            {

                commandHash["Test"].DynamicInvoke(str);
            }
            catch
            {
                Console.WriteLine("Exception");
            }

        }
        static  bool Test(string[] s)
        {
            Console.WriteLine("Test");

            return true;
        }
    }
}


// CODE which works OK, what Im missing ?!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, Delegate> commandHash = new Dictionary<string, Delegate>();
            commandHash.Add("Test", new Func<string[], int, bool>(Test));
            string[] str = { "justtext" };

            try
            {

                commandHash["Test"].DynamicInvoke(str, 1);
            }
            catch
            {
                Console.WriteLine("Exception");
            }

        }
        static  bool Test(string[] s, int i)
        {
            Console.WriteLine("Test");

            return true;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

DynamicInvoke参数使用 params对象[] 定义。

这意味着当您将string []数组传递给此函数时,字符串数组中的每个条目都是一个新参数。

您收到异常是因为您无法将字符串转换为字符串[];

您需要做的就是像这样调用DynamicInvoke。

commandHash["Test"].DynamicInvoke(new object[] { str });