其中T:<interface>到T:class给出cs0452 </interface>

时间:2012-04-29 22:00:46

标签: c# generics

我有

public static void SecureTcpRpc<InterfaceType>(string uri, 
                                               Action<InterfaceType> action) 
                                              where InterfaceType : class;

然后我在这里使用

 private static AuthorizedActionResult 
                RunChannelAction<T>(IEnumerable<string> uris, 
                                    Func<T, AuthorizedActionResult> actionFunc)
                                    where T : IPingable
            {
                    WcfClient.SecureTcpRpc<T>....

编译器不喜欢我将T限制为IPing。我不明白为什么它反对。 IPingable是一种引用类型,因此它匹配SecureTpcRpc方法的约束。但是编译器说“T必须是引用类型”

2 个答案:

答案 0 :(得分:5)

我认为你需要AuthorizedActionResult函数的“class”约束才能使它工作。

where T : class, IPingable

答案 1 :(得分:1)

第二个应该是通用的吗?如果是接口类型,它应该是这样的:

private static AuthorizedActionResult RunChannelAction(
  IEnumerable<string> uris, 
  Func<IPingable, AuthorizedActionResult> actionFunc)
        {
                WcfClient.SecureTcpRpc<IPingable>....