c# - 通用参数的动态长度

标签 c# .net generics

我写了一个方法来获取对象数组,数组内容的类型作为泛型,并尝试将每种类型转换为交付的泛型:

    public static void GetMultipleObjectsFromParameters<T, U>(
        object parameterArray, out T parameter1, out U parameter2)
    {
        parameter1 = default(T);
        parameter2 = default(U);

        try
        {
            object[] arr = parameterArray as object[];

            if (arr == null)
            {
                Debug.WriteLine("array not valid");
                return;
            }
            if (arr.Length != 2)
            {
                Debug.WriteLine("arr.Length != 2");
                return;
            }

            parameter1 = (T)arr[0];
            parameter2 = (U)arr[1];
        }
        catch (Exception ex)
        {
            Debug.Write(ex);
        }
    }

我认为如果我使用 BackgroundWorker 并希望传递多个不同类型的参数(例如,第一个参数为字符串,第二个为整数...),此方法可能会非常有用。

现在我只是想知道是否有一种方法可以在不强制使用固定大小的参数的情况下编写此方法。这会阻止我为每个参数计数编写这样的方法。

我希望这个问题是可以理解的。有简单的方法吗?感谢您的帮助。

最佳答案

编辑:这个答案解决了原始问题而不是背后的动机。在将工作传递给 BackgroundWorker 方面等等,使用 lambda 表达式非常有意义。

Now I've just wondered if there is a way to write this method without forcing a fixed size of parameters.

不,恐怕不是。您正在寻找的是高阶类型,我认为1 - 但它们在 .NET 中不存在(这就是为什么有这么多“泛型重载” "对于 Func<>Tuple<>Action<> 等)。


1 老实说,我自己对这些事情了解不多。乔·达菲有一个 blog post这让我有些吃惊,但可能会有用。

关于c# - 通用参数的动态长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981965/

相关文章:

c# - 优化 Parallel.For 的性能

c# - 电灯开关数据源错误中的共享点

c# - 最佳拟合算法以在回合中均匀放置对决

generics - 如何声明对泛型中任何子程序形式类型的访问?

C# 通过 Delegate.CreateDelegate 使用具有值类型的属性

c# - 快速内存图形数据库

c# - CancellationTokenSource或AutoResetEvent

c# - asp 按钮里面的 Font Awesome

c# - .net中Contiguous memory存储的误区?

java - 什么是原始类型,为什么我们不应该使用它呢?