Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 铸造一个系统。Func<;T>;_C#_Generics_Func - Fatal编程技术网

C# 铸造一个系统。Func<;T>;

C# 铸造一个系统。Func<;T>;,c#,generics,func,C#,Generics,Func,我正在重新分解一些使用以下构造的代码。我希望能够做到的是将此设置为泛型,这样我就可以在Func中使用其他参数类型 IDictionary<string, Func<Employee, string>> 我一直在兜圈子,所以任何指点都会很感激的 编辑: 这是我收到的完整异常消息: System.InvalidCastException : Unable to cast object of type 'System.Collections.Generic.Dictionar

我正在重新分解一些使用以下构造的代码。我希望能够做到的是将此设置为泛型,这样我就可以在Func中使用其他参数类型

IDictionary<string, Func<Employee, string>>
我一直在兜圈子,所以任何指点都会很感激的

编辑:

这是我收到的完整异常消息:

System.InvalidCastException : Unable to cast object of type 'System.Collections.Generic.Dictionary`2[System.String,System.Func`2[DataObjects.Employee,System.String]]' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'.

那是不安全的


如果这是合法的,那么如果您将
Car
传递给其中一个铸造值(实际上是
Func
),会发生什么情况?

将字典键入
IDictionary
并将结果值转换为:

IDictionary<string, object> myDictionary = new Dictionary<string, object>();
var myDelegate = (Func<Employee, string>)myDictionary["my employee delegate"];
IDictionary myDictionary=新字典();
var myDelegate=(Func)myDictionary[“我的员工代表”];

当然,如果您试图强制转换错误的Func类型,则此操作将失败,因此您应该确保知道哪些键映射到哪些Func类型。

听起来您希望词典具有不同类型的值;换句话说,一本字典可能包含一个
Func
和一个
Func

如果是这样,那么您基本上别无选择,只能对
TValue
type参数使用公共基类型,并在从字典中检索委托时强制转换委托。常见的基本类型可以是
System.Delegate
System.Object

(事实上,除此之外还有其他选择,但它们只是将转换推到设计的不同部分。例如,您可以编写一个包装器类来处理转换。不过,此类解决方案通常经不起成本效益分析。)


我的字典将只保存相同的类型,但在不同的情况下,我希望它能够保存不同的类型。我的问题是从Func到Func的转换抛出转换异常

在这种情况下,不清楚您为什么想要一个
字典而不是
字典。如果任何给定字典只包含一种委托类型,则相应地创建字典:

Dictionary<string, Func<Employee, string>> dict = new Dictionary<string, Func<Employee, string>>();
Dictionary dict=new Dictionary();
如果字典是泛型类的成员,或泛型方法的局部变量或参数,则可以在字典的声明中使用类型参数:

class Processor<T>
{
     void Process(T value, Dictionary<string, Func<T, string>> functions) { //... }
}
类处理器
{
void进程(T值,字典函数){/…}
}

我的字典只能保存相同的类型,但在不同的情况下,我希望它能够保存不同的类型。我的问题是从Func到Func的转换会抛出转换异常。@bigtv为什么要转换它?你说的“不同场景”是什么意思?我补充了一些想法;如果你能澄清,我会补充更多。
IDictionary<string, object> myDictionary = new Dictionary<string, object>();
var myDelegate = (Func<Employee, string>)myDictionary["my employee delegate"];
Dictionary<string, Func<Employee, string>> dict = new Dictionary<string, Func<Employee, string>>();
class Processor<T>
{
     void Process(T value, Dictionary<string, Func<T, string>> functions) { //... }
}