gpt4 book ai didi

.net - 创建泛型函数的委托(delegate)

转载 作者:行者123 更新时间:2023-12-01 11:09:25 26 4
gpt4 key购买 nike

我正在写一些单元测试,我有很多表单的功能

public void SomeTestHelperMethod<TKey, TValue>(TKey key, TValue value)

我用这样的各种参数反复调用它

SomeTestHelperMethod<int, int>(0, 1);
SomeTestHelperMethod<int, object>(1, new Nullable<double>(16.5));
SomeTestHelperMethod<int, string>(2, "The quick brown fox jumped over the lazy dog.");
SomeTestHelperMethod<object, int>(new NullReferenceException(), 15);
SomeTestHelperMethod<object, object>(StringComparison.Ordinal, new Version());
SomeTestHelperMethod<object, string>((ushort)3, string.Empty);
SomeTestHelperMethod<string, int>(string.Empty, 195);
SomeTestHelperMethod<string, object>("A string", this);
SomeTestHelperMethod<string, string>("Another string", "Another string");

我想做的是编写一个函数,它接受一个 Action 委托(delegate),并可以使用所有不同的参数调用该委托(delegate)。有什么办法吗?

答案:

感谢 MichaelCG 这是我最终做的事情:

private void CallWithKeyAndValue(string methodName)
{
MethodInfo method = typeof(ObservableDictionaryTest).GetMethod(methodName);
foreach (KeyValuePair<object, object> kvp in ourKeyValueSet)
{
MethodInfo genericMethod = method.MakeGenericMethod(kvp.Key.GetType(), kvp.Value.GetType());
genericMethod.Invoke(this, new[] { kvp.Key, kvp.Value });
}
}

我仍然对更通用的方法感兴趣,但这个方法对我来说很实用。

最佳答案

如果我对您的理解正确,这应该表明您正在尝试做什么。神奇之处在于 MakeGenericMethod。

using System;

class Program {
static void Main(string[] args) {
var meth = typeof(Program).GetMethod("Meth");
var items = new[] {
new { a = (object)"hi", b = (object)1 },
new { a = (object)TimeSpan.MaxValue, b = (object)DateTime.UtcNow },
};
foreach (var item in items) {
var gmeth = meth.MakeGenericMethod(item.a.GetType(), item.b.GetType());
gmeth.Invoke(null, new[] { item.a, item.b });
}
}

public static void Meth<A, B>(A a, B b) {
Console.WriteLine("<{0}, {1}>", typeof(A).Name, typeof(B).Name);
}
}

输出:

<String, Int32> 
<TimeSpan, DateTime>

关于.net - 创建泛型函数的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645635/

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