gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:18:57 26 4
gpt4 key购买 nike

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

static void ParamsTest(string template, params object[] objects)

我想在我的模板中使用对象/属性名称来替换我的“对象”参数中任何对象的实际属性值。假设我用以下方法调用此方法:

ParamsTest("Congrats", customer, purchase);

我将只能检索两个试图填写模板的参数名称,即 template , 和 objects ,以及 objects 中对象的名称收藏是否永远丢失?

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

最佳答案

受 Mark 的启发,我可以提供匿名类型的答案:

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);
}
}
}

但是这确实有缺点:

  • 没有类型安全。我可以传入任何对象
  • 我可以传入一个匿名类型,其成员和/或类型与预期的不同
  • 你还应该比这个简短的示例做更多的检查

关于c# - 如何将可变数量的命名参数传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3383397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com