C# 铸造一个系统。Func<;T>;
我正在重新分解一些使用以下构造的代码。我希望能够做到的是将此设置为泛型,这样我就可以在Func中使用其他参数类型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
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) { //... }
}