如何将可变数量的命名参数传递给方法?

Pro*_*ofK 5 .net c#

我理解如何获取传递给方法的参数名称,但是假设我有一个方法声明如下:

static void ParamsTest(string template, params object[] objects)
Run Code Online (Sandbox Code Playgroud)

我希望在我的模板中使用对象/属性名称替换我的`objects'参数中的任何对象中的属性值.那么我们就说我用以下方法调用此方法:

ParamsTest("Congrats", customer, purchase);
Run Code Online (Sandbox Code Playgroud)

我只能检索两个试图填写模板的参数名称,即template,和objects,并且objects集合中对象的名称永远丢失,不是吗?

我可能需要一个List<object>作为我的第二个参数,但我觉得有一个更优雅的解决方案,可能有一个lambda或其他东西.我不知道,我不习惯在LINQ之外使用lambdas.

And*_*nea 5

由马克提出我可以提供一个匿名类型的答案:

using System;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            ParamsTest(new { A = "a", B = "b"});
        }

        public static void ParamsTest(object o)
        {
            if (o == null)
            {
                throw new ArgumentNullException();
            }
            var t = o.GetType();
            var aValue = t.GetProperty("A").GetValue(o, null);
            var bValue = t.GetProperty("B").GetValue(o, null);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这个有缺点:

  • 没有类型安全.我可以传递任何物体
  • 我可以使用与预期不同的成员和/或类型传递匿名类型
  • 您还应该进行比此简短样本更多的检查