![](/img/trans.png)
[英]How to pass multiple converter parameter in generic Enum to Boolean Converter
[英]how to pass a converter (constraints not applicable for generic arguments)
我想将转换器传递给方法,约束必须是转换器总是获取一个字符串作为参数。 我尝试了以下,但它不会编译:
class Test
{
public void Foo(string val, Converter<Tin,Tout> conv)
where Tin:string
{
myObj = conv(val);
}
}
如果Tin总是成为一个字符串,那么限制Tin的意义何在?
class Test
{
public void Foo<Tout>(string val, Converter<string,Tout> conv)
{
myObj = conv(val);
}
}
只需摆脱Tin
类型并在Converter
使用string
。 我觉得你过于复杂了。
您不能将字符串用作generic constraint
因为它是sealed class
。 这是完全合理的,因为没有什么可以从string
继承,所以为什么为string
添加约束?
也就是说,如果你能够从字符串继承:
public SuperString : string
然后你可以使用string
作为约束并通过SuperString
作为Tin
。 但是你不能这样做,因为string
是一个sealed class
。 因此,唯一可以传递给Tin
对象是String
。
因此,你可以摆脱Tin
并使用我上面写的代码。
每当函数签名应携带泛型参数或带泛型类型参数的参数时,该类型参数必须是方法声明的一部分,并且该方法本身变为通用的。
特别是,要约束的泛型类型参数必须是Foo方法签名的一部分。
试试这种方式:
class Test
{
public void Foo<Tout>(string val, Converter<string, Tout> conv)
{
myObj = conv(val);
}
}
你的代码荒谬。
where Tin:string
无效。 修复此问题,并将通用参数添加到方法中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.