繁体   English   中英

如何传递转换器(约束不适用于泛型参数)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM