如何解决创建具有不同参数类型的 C# Func 列表
我希望能够创建多个 Func
,每个都接受一个类型的实例并返回相同的类型,例如:
Func<Foo,Foo>
Func<Bar,Bar>
然后将这些添加到 List
(或者可能添加到 Dictionary
,由 Func
处理的类型键控)。
然后给定任何实例 y
(其类型在编译时未知),我想检索并调用 Func
将在 {{ {1}}。
我所要求的可能吗?
解决方法
您可以创建代表字典。使用类型作为键。
Dictionary<Type,Delegate> _dictionary = new();
我们需要一个方法来添加委托:
bool Add<T>(Func<T,T> func)
{
return _dictionary.TryAdd(typeof(T),func);
}
还有一个给他们打电话:
static T DoIt<T>(T t)
{
if (_dictionary.TryGetValue(typeof(T),out var func))
{
return ((Func<T,T>)func).Invoke(t);
}
throw new NotImplementedException();
}
工作示例:
using System;
using System.Collections.Generic;
public class Program
{
private static Dictionary<Type,Delegate> _dictionary = new();
public static void Main()
{
Add<String>(InternalDoIt);
Add<int>(InternalDoIt);
DoIt("Hello World"); // Outputs "Hello World"
DoIt(1); // Outputs "1"
DoIt(DateTime.Now); // Throws NotImplementException
}
static bool Add<T>(Func<T,T> func)
{
return _dictionary.TryAdd(typeof(T),func);
}
static T DoIt<T>(T t)
{
if (_dictionary.TryGetValue(typeof(T),out var func))
{
return ((Func<T,T>)func).Invoke(t);
}
throw new NotImplementedException();
}
static string InternalDoIt(string str){
Console.WriteLine(str);
return str;
}
static int InternalDoIt(int i) {
Console.WriteLine(i);
return i;
}
}
在制作这个答案时没有小狗或小猫死亡。
,您是否考虑过以下方法?
using System;
public class Program
{
public static void Main()
{
DoIt("Hello World");
DoIt(1);
DoIt(DateTime.Now);
}
static dynamic DoIt(dynamic t)
{
return InternalDoIt(t);
}
static object InternalDoIt(object obj) => throw new NotImplementedException();
static string InternalDoIt(string str){
Console.WriteLine(str);
return str;
}
static int InternalDoIt(int i) {
Console.WriteLine(i);
return i;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。