在泛型方法中使用实例的方法

时间:2014-07-31 13:48:11

标签: c# generics

我的代码是这样的:

public T ReadState<T>(string file_path)
{
    string file_content = ...read file..from file_path...        
    T state = ...xml deserialize...
    state.SetSomething(); //  <--the problem is here <--
    return state;
}

我想在各种对象类型上使用这种泛型方法。 当然,他们都实施了SetSomething()方法

目前,编译器抱怨:

  

'T'不包含SetSomething()...

的定义

TIA!

1 个答案:

答案 0 :(得分:5)

  

当然,他们都实施了SetSomething()方法

然后你应该告诉编译器:

  • 使用SetSomething()方法
  • 创建界面
  • 使所有相关类型实现接口
  • 约束T来实现该接口:

    public T ReadState<T>(string file_path) where T : IYourNewInterface
    

如果你不能使所有类型都实现一个接口,最简单的解决方案可能是使用动态类型:

((dynamic) state).SetSomething();

在可行的情况下,接口解决方案更清洁。